索引分类以及创建语句
普通索引:最基本的索引,没有任何限制
1 | ALTER TABLE 表名 ADD INDEX 索引名( 列名) |
唯一索引:与”普通索引”类似,不同的就是:索引列的值必须唯一,但允许有空值。
1 | ALTER TABLE `table_name` ADD UNIQUE (`column`) |
主键索引:它 是一种特殊的唯一索引,不允许有空值。
1 | ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) |
全文索引:仅可用于 MyISAM 表,针对较大的数据,生成全文索引很耗时好空间。
1 | ALTER TABLE `table_name` ADD FULLTEXT ( `column` ) |
组合索引:为了更多的提高mysql效率可建立组合索引,遵循”最左前缀“原则。
1 | ALTER TABLE `table_name` ADD index index_name ( `column1`, `column2`, `column3` ) |
哪些情况不需要创建索引
1.where条件、group by、order by 里用不到,或者用的非常少的字段不需要创建索引
2.表记录太少,比如几百条
3.字段中有大量重复数据,比如性别
4.频繁更新的字段
索引失效的情况
1.查询条件使用or, 有可能导致索引失效,查询条件or使用的所有字段都建立了索引,并且数据不能太少,才会使用索引
2.模糊查询like。无效情况:比如 字段 like '%xxx''
前面使用%索引字段查询失效。有效情况:比如 字段 like 'xxx%'
后面使用%索引字段查询有效
3.使用比较运算符 <>或!= 索引字段查询失效
4.查询时对索引字段进行表达式计算,比如EXPLAIN SELECT * FROM student WHERE id+1=2;
5.对索引字段使用函数,EXPLAIN SELECT * FROM student WHERE SUBSTRING(department,0,3)= ‘外形系’
如果是联合索引,没有遵循最左原则
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 郝永亮的主页!
评论