A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

五、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=点击这个链接去访问哦


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马