- 索引
- 专门拿来提升查询性能,以牺牲增删改性能
- 单列索引
- 创建普通索引
- 最基本的索引,没有任何限制
- ALTER TABLE '表名' ADD INDEX '索引名' (‘字段名’)
- 创建唯一索引
- 索引列的值必须唯一,但允许有空值
- ALTER TABLE '表名' ADD UNIQUE INDEX '索引名' (‘字段名’)
- 创建主键索引
- 创建主键索引(一种特殊的唯一索引,不允许有空值,一般建表时创建)
- ALTER TABLE '表名' ADD PRIMARY KEY(‘字段名’)
- 创建全文索引
- 用于检索文本信息,仅限于MyISAM数据库引擎有效
- ALTER TABLE '表名' ADD FULLTEXT(‘字段名’)
- 组合索引
- 创建组合普通索引
- ALTER TABLE '表名' ADD INDEX '索引名' (‘字段名1’,‘字段名2’)
- 创建组合唯一索引
- ALTER TABLE '表名' ADD UNIQUE INDEX '索引名' (‘字段名1’,‘字段名2’)
- 组合索引遵循最左前缀原则(建索引列的顺序必须要和sql语句的出现顺序一致)
- 查询索引
- SHOW INDEX FROM '表名'
- 删除索引
- DROP INDEX ‘索引名’ on ‘表名’
- 优点
- 可以通过建立唯一索引或者主键索引,保证数据库表中每一行数据的唯一性
- 建立索引可以大大提高检索的数据以及减少表的检索行数
- 建立索引可以加速表与表直接的相连,提升联表查询效率
- 在分组和排序字句进行数据检索,可以减少查询时间中分组排序时所消耗的时间(数据库的记录会重新排序)
- 建立索引可以在查询中使用索引,可以大大提高性能
- 缺点
- 在创建索引和维护索引,会耗费时间,随着数据量的增加而增加
- 索引文件会占用物理空间,除了数据表需要占用物理空间之外每一个索引还会占用一定的物理空间
- 当对表的数据进行更新操作时,索引也要动态的维护,这样就会降低数据的维护速度(建立索引会占用磁盘空间的索引文件)
- 创建索引建议
- 表的主键、外键建议创建索引
- 表记录非常大建议创建索引
- 经常与其他表进行连接的表,在连接字段上建议创建索引
- 经常出现在where子句中的字段,特别是大表的字段,建议创建索引
- 索引一般建在经常搜索的字段上
- 索引一般建在小字段上(短索引),对于大的文本字段或超长字段不要建索引,可以建全文索引但必须数据库引擎支持
- 经常需要排序、分组的字段上,建议创建索引
- 不要在字段上进行运算,这样会导致该字段上创建的索引失效
- 不创建索引建议
- 查询中很少使用到的字段列,不应该创建索引;如果建立了索引反而会降低MySQL的性能和增大了存储空间需求
- 很少数据的字段列,不应该建立索引(比如一个性别字段0或者1)
- 定义为text、image或bit数据类型的字段列不应该增加索引
- 当表更新操作远远大于查找操作时不应该创建索引,这两个操作是互斥操作
索引
最新推荐文章于 2023-07-07 14:55:02 发布