索引:是针对数据所建立的文件夹.
作用: 能够加快查询速度
负面影响: 减少了增删改的速度.
索引的创建原则:
1:不要过度索引
2:在where条件最频繁的列上加.在反复度高的列上不加,比方性别男女。
3:尽量索引散列值,过于集中的值加索引意义不大.
索引的类型
普通索引: index 不过加快查询速度.
唯一索引: unique index 行上的值不能反复
主键索引: primary key 不能反复.
主键必唯一,可是唯一索引不一定是主键.
一张表上,仅仅能有一个主键, 可是能够用一个或多个唯一索引.
全文索引 : fulltext index 在mysql的默认情况下, 对于中文意义不大.一般使用第三方解决方式
由于英文有空格,标点符号来拆成单词,进而对单词进行索引.
而对于中文,没有空格来隔开单词,mysql无法识别每一个中文词.
(上述3种索引,都是针对列的值发挥作用,但全文索引,能够针对值中的某个单词,比方一篇文章,)全文索引不针对很频繁的词做索引,如this, is, you, my等等.
索引长度:指定一列部分内容作为索引
多列索引:两列或多列值看做总体。当做索引。在英文站点时,first name。last name当做一个总体。此时。where条件中仅仅有first name能够发挥作用。last name 没有发挥作用,这就是作为的左前缀规则。
冗余索引:某列有多个索引。比如在上面last name上再次建立索引。
u 使用索引的注意事项
说明。假设我们的表中有复合索引(索引作用在多列上), 此时我们注意:
1。 对于创建的多列索引。仅仅要查询条件使用了最左边的列,索引一般就会被使用。
explain select * from dept where loc='aaa'G
就不会使用到索引
2,对于使用like的查询,查询假设是 ‘%aaa’ 不会使用到索引
‘aaa%’ 会使用到索引。
比方: explain select * from dept where dname like '%aaa'G
不能使用索引,即。在like查询时,关键的 ‘keyword’ , 最前面,不能使用 % 或者 _这种字符.。 假设一定要前面有变化的值,则考虑使用 全文索引->sphinx.
3。 假设条件中有or。即使当中有条件带索引也不会使用。
换言之,就是要求使用的全部字段,都必须建立索引, 我们建议大家尽量避免使用or keyword
select * from dept where dname=’xxx’ or loc=’xx’ or deptno=45
4。假设列类型是字符串,那一定要在条件中将数据使用引號引用起来。
否则不使用索引。(加入时,字符串必须’’), 也就是,假设列是字符串类型,就一定要用 ‘’ 把他包含起来.
5, 假设mysql预计使用全表扫描要比使用索引快。则不使用索引。
u 怎样查看索引使用的情况:
show status like ‘Handler_read%’;
大家能够注意:
handler_read_key:这个值越高越好。越高表示使用索引查询到的次数。
handler_read_rnd_next:这个值越高,说明查询低效。