avatar

MySQL索引

索引分类以及创建语句

普通索引:最基本的索引,没有任何限制

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)= ‘外形系’
如果是联合索引,没有遵循最左原则

文章作者: 微信:hao_yongliang
文章链接: https://haoyongliang.gitee.io/2019/07/09/mysql/MySQL%E7%B4%A2%E5%BC%95%E5%A4%B1%E6%95%88%E7%9A%84%E5%87%A0%E7%A7%8D%E6%83%85%E5%86%B5/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 郝永亮的主页
打赏
  • 微信
    微信
  • 支付寶
    支付寶

评论