当前位置:Gxlcms > 数据库问题 > mysql索引整理

mysql索引整理

时间:2021-07-01 10:21:17 帮助过:22人阅读

一.索引:

1.创建一般索引 create index index_name on table_name(columnname[...]); 

2.分析sql执行语句 在select 之前加explain eg:explain select * from table_name;

3.mysql从5.5.5之后默认采用innerdb为默认的存储引擎,该引擎支持的两种常见索引:b+树索引和hash索引,hash索引的效率高于b+树,但hash索引只支持=类型。

b+树可以支持范围的eg:>< ,b+树一般三层即可表示,即访问3次io可找到数值。

二.常见丢失索引的情况

1.左前缀法则:建立的联合索引,如果查询条件没有第一个带索引的列,则会丢失索引效果。

2.在索引的列表上有函数eg:max() left() avg(),则会丢失索引

3.使用<>或!=会无法使用索引 遇到不等于的情况,建议改用范围查询大于 or 小于

4.建议少用or

5.is null && is not null 会引起全表扫描

6.varchar类型字段加‘‘ 否则会出现2的场景,因为mysql会隐式转化,先将数字转成varchar

数据库中定义为日期类型的字段,查询时程序中用str_to_date转成日期在查询,否则mysql也会进行隐式转化

7.like ‘%_%‘ && like ‘%_‘ 会引起全表扫描,将%放在右边eg: like ‘_%‘能引用到索引,索引类型type=range

实际情况下如果左右两边都要加百分号,我们可以用覆盖索引来解决,eg: select name from table where name like ‘%name%‘; create index index_name on table(name,age);

要求所查询的字段必须被索引所覆盖到,在explain的时候,输出的extra信息中如果有“Using Index”,就表示这条查询使用了覆盖索引,这就是覆盖索引。

在mybatis持久层框架中我们可以用concat拼接的方式处理。

8.减少select * 的使用

 

mysql索引整理

标签:表示   存储   varchar   没有   cat   extra   ext   range   范围查询   

人气教程排行