数据库索引-索引的优点、缺点、分类、不走索引的情况

如果不了解数据库索引相关的知识,我们可能在写查询语句时就会浪费已有的索引,注意哪些情况会不走索引,我们在写查询语句时可以尽可能避免对应的场景。

 

使用索引的优点

1、提高数据搜索的速度;

2、加快表与表之间的连接速度;

3、使用分组或排序时,如果有索引,可以加快分组或排序的速度,从而提高搜索效率;

4、主键索引和唯一索引可以保证每一行数据的唯一性,防止改动数据时对应错数据行。

 

索引的缺点

1、创建数据库时,需要花费时间去创建和维护索引;

2、索引会占用存储空间;

3、修改表的数据时,也需要动态维护索引。

 

数据库索引的分类

主键索引、唯一索引、普通索引、全文索引、组合索引

 

主键索引:不能为空+不能重复+加速查询;

唯一索引:不能重复+加速查询;

普通索引:加速查询;

全文索引:对文本的内容进行分词,进行搜索;

组合索引:多列组成一个索引

 

主键索引:PRIMARY KEY

创建唯一索引:ALTER TABLE tableName ADD UNIQUE(字段名)

创建普通索引:ALTER TABLE tableName ADD INDEX indexName(字段名)

创建全文索引:ALTER TABLE tableName ADD FULLTEXT (字段名1,字段名2)

创建组合索引:CREATE INDEX indexName ON tableName(col_name_1,col_name_2);

  

删除索引:DORP INDEX indexName ON ‘tableName’

 

不走索引的情况

1、对索引列有不等于(!=、<>)的条件语句;

2、对索引列使用函数的语句;

     例如:sname字段创建了索引

     WHERE concat(`sname`,'abc') ='Jaskeyabc' 不走索引

     WHERE `sname` =concat('Jaskey','abc') 走索引

3、对索引列进行计算的语句;

     例如:age字段创建了索引

     那么where age +30=40,不走索引

     Where  age = 40-30,走索引

4、模糊查询%放在前面的;

     模糊查询,%在前面,不走索引,%放末尾,走索引

5、查询条件有or,但不是每个语句都创建了索引(不是每个条件都创建了索引,会导致所有索引都失效;如果每个条件都创建了索引,是走索引的);

6、字符串列查询,对应的值没有使用引号;

     例如:a列是字符char类型,创建了索引

     WHERE `a`='1' -- 走索引

     WHERE `a`=1 -- 字符串和数字比较,不走索引

     但是如果那个列是一个数字类型,拿来和字符类型做比较,则不会影响到使用索引,但仍需尽量避免一切隐式类型转换

7、组合索引,没有遵守最左匹配原则;

8、MySQL认为全表扫描会比走索引快,它就会不走索引(这种情况一般不用理会,如果实在要让它走索引,可以使用 force index强制MySQL走索引)。

 

posted @ 2021-04-06 18:52  倾听起风  阅读(702)  评论(0编辑  收藏  举报