PHP面试必备知识-Mysq优化(二)

188 阅读3分钟
Mysql优化——索引



定义:
索引相当于书目录中的结构页,加快访问速度。


优点:
加快查询速度


缺点:
增加空间占用,影响增、删、改语句执行效率。因为每次执行完操作都需要更新索引。


索引的分类:


普通索引(index)----------------仅仅是为了加速访问


唯一索引(unique)--------------数据不能重复


主键索引(primary key)-------数据必须唯一,且不能为null


全文索引(full text)-------------提取制定字段的关键字(不支持中文)


组合索引-----------------------------索引建立在多个字段上


增加索引:alter table 表名 add 索引类型 索引名称(字段)


删除索引:drop index 索引名称 on 表名


创建索引原则:


用于频繁搜索的列


用于排序的字段


做条件查询的列


如果列中仅仅包含几个不同的值,比如性别(男和女)


如果数据量不大就不用做索引,因为通过索引查找数据比全表扫描所花的时间更长


索引的使用原则:


like查询(“%”和“_”开头)索引失效


or运算都要具有索引否则索引失效


where条件字符串必须加引号


组合索引字段单独使用,左边生效,右边失效(左原则)



前缀索引:


定义:
指定字段内容,如果其内容前n个字符具备唯一性,将其创建为索引,最终形成前缀索引。


优点:
索引很长的字符列,它会使索引变大而且变慢,前缀索引能很好地减少索引的大小及提高速度


创建前缀索引:
alter table 表名 add 索引类型 索引名称(字段名(长度))


C:/Users/wendy/AppData/Local/YNote/data/m18956210239@163.com/837c4aedaed24830be0226a8167a62f6/clipboard.png

全文索引:


定义:
指定字段提取关键字创建索引(不支持中文)


优点:
提高模糊查询效率、并增强搜索功能(注:mysql5.6以上innodb才支持)


语法:
select * from 表名where match(字段) against(‘内容’ IN BOOLEAN MODE);


说明:


match 指定检索的字段,多个用逗号隔开,如:‘字段1’,‘字段2’


against 指定搜索的内容,多个用逗号隔开,如:‘内容1,内容1’



索引优化策略:


limt分页优化:
由于当数据量大超过一定页后sql语句索引失败,这个时候就需要使用where对分页进行优化。(如:select * from 表名 where id>10000 limit


10;)先把数据过滤出来,然后在分页。



查询缓存:


作用:
开启SQL缓存节省数据查询时间(第一次查询后第二次从缓存中取)


操作:


查看SQL缓存参数:show variables like 'query_cache%';


开启SQL缓存:set global query_cache_type = 1;


关闭SQL缓存:set global query_cache_type = 0;


设置缓存空间:set global query_cache_size = 1024*1024*64 (64M)


固定SQL语句声明不适用缓存:select sql_no_cache * from 表名



HASH算法:


根据一个特定的算法,将数据加密唯一标识,根据条件获取唯一地址,直接根据唯一地址取那个数据。HASH的查询效率比BTree算法的查询效率高。


C:/Users/wendy/AppData/Local/YNote/data/m18956210239@163.com/d05faefb998447f5839ef9e257219f2a/wps198f.tmp.jpeg

BTree算法:


正常的查询,查询的次数约:N/2;BTree查询的次数约2的n次方减一;所以BTree的效率肯定比正常的查询的效率高。


C:/Users/wendy/AppData/Local/YNote/data/m18956210239@163.com/907b69e5f48a44d885c493183f93a98d/wpsdd10.tmp.jpeg

非聚簇索引:
myisam;数据和索引不在一起;


聚簇索引:
innodb;数据和索引在一起;


关于的区别我在之前的文章中已经做了介绍,如果有兴趣,可以


http://bbs.itheima.com/forum.php?mod=viewthread&tid=370711&extra=点击这个链接去访问哦