一. 索引的使用和选择
索引的使用可以在数据查询过程中加快数据搜索的进度,如果数据库比作一部字典,没有索引想要获取目标的某个词,从第一页开始搜索直到目标被搜索到,如果目标刚好在字典最后一页,那基本是上遍历了整个字典,如果添加索引就如可以在字典上根据拼音或者笔画,部首找到目标所在的页面,直接跳转到目标页面进行搜索。
1.1选择标识符:使用整数的标识符比使用字符串的标识符要快
article表,id作为主键,类型为varchar,数据量为3979条
select * from article -- 用时1.5-1.65秒之间
desc select * from article; 遍历的行数是3105行
article表,id作为主键,类型为int,数据量为3979条
select * from article -- 用时1.52-1.5秒之间
desc select * from article; 遍历的行数是2820行
1.2索引的数据类型选择
数据类型越小,越简单为好,设计字段值时尽量避免NULL值,NULL值会使索引运行复杂或者无法使用索引进行查询,如果字段值为空可以在数据库时指定字段为NOT NULL,然后字段的值默认为一个字符串'0'
1.3组合索引的字段选择
组合索引的使用规则是从最左边开始适配,比如一个组合索引index(a,b,c),则可以用如下字段进行查询,a,ab,abc,但是不能从b,bc两个字段进行查询,这个时候索引不起作用。这就是最左匹配
一张文章表article,索引是组合索引article_title,article_author
组合索引,通过两个索引条件进行查询,用时0.890秒
select * from article where article_title like '%渗透%' and article_author like '%FreeBuf%'; -- 0.890s
组合索引,数据查询遍历2820行
desc select * from article where article_title like '%渗透%' and article_author like '%FreeBuf%'; -- 2820
组合索引,通过article_author进行查询,用时1.396秒
select * from article where article_author like '%FreeBuf%'; -- 1.396s
组合索引,通过title查询,用时0.923
select * from article where article_title like '%渗透%' -- 0.923s
1.4 数据库短索引
如果一个字段的值很长,但是可以通过前面的几个字符能得出值,那么可以设置前面n个字符的索引。比如create index short_index_name('name(10)') ,这里的