博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据局库的索引优化
阅读量:6091 次
发布时间:2019-06-20

本文共 1919 字,大约阅读时间需要 6 分钟。

数据局库的索引优化

MySQL索引

MySQL的B-tree索引特点:
1. B-tree索引以B+树的结构存储数据
2. B-tree索引能够加快数据的查询速度
3. B-tree索引更适合进行范围查找
使用场景:
1. 全职匹配的查询
2. 匹配最左前缀的查询
3. 匹配列前缀查询
4. 匹配范围值得查询
5. 精确匹配左前缀并范围匹配另外一列
6. 只访问索引的查询
7. 只访问索引查询
Btree索引的使用限制
1. 如果不是按照索引的最左列开始查找,则无法使用索引
2. 使用索引时不能跳过索引中左边的列
3. not in和<>操作无法使用索引
4. 如果查询中有某个列的范围查询,则其右边所有列都无法使用索引
MySQL的Hash索引特点:
1. Hash索引时基于Hash表实现的,只有查询条件精确匹配Hash索引中的所有列时,才能够使用带hash索引
2. 对于Hash索引中的所有列,存储引擎都会为每一行计算一个Hash码,Hash索引中存储的就是Hash码
Hash索引的使用限制:
1. Hash索引必须进行二次查找
2. Hash索引无法用于排序
3. Hash索引不支持部分索引查找也不支持范围查找
4. Hash索引中的Hash码计算可能存在Hash冲突
索引的作用:
- 索引大大减少了存储引擎需要扫描的数据量
- 索引可以帮助我们进行排序以避免使用临时表
- 索引可以把随机IO变为顺序IO
索引是不是越多越好???
- 索引会增加写操作的成本
- 太多的索引会增加查询优化器的选择时间
安装时演示的数据库:
wget
tar -zxf sakila-db.tar.gz
mysql -uroot -p < sakila-schema.sql
mysql -uroot -p < sakila-data.sql
索引的优化策略:
索引列上不能使用表达式或者函数:
select ... from product where todays(out_date)-todays(current_date)<=30
select ...from product where out_date<=date_add(current_date,interval 30 day)
前缀索引和索引列的选择性:
create index index_name on table(col_name(n));
※ 索引的选择性是不重复索引值和表的记录数的比值
联合索引:
如何选择索引列的顺序:
1. 经常会被使用的列优先的原则
2. 选择性高的列优先原则
3. 宽度小的列优先原则
覆盖索引:
- 优点:
1. 可以优化缓存,减少磁盘IO操作
2. 可以减少随机IO,变随机IO操作为顺序IO
3. 可以避免对InnoDB主键索引的二次查询
4. 可以避免MyISAM表进行系统调用
- 缺点:
1. 存储引擎不支持覆盖索引(eg:memory)
2. 查询中使用了太多的列
3. 使用了双%号的like查询
使用索引来优化排序:
1. 通过排序操作
2. 按照索引顺序扫描数据
> 条件:
1. 索引的列顺序和order by子句的顺序完全一致
2. 索引中所有列的方向(升序,降序)和order by子句完全一致
3. order by中的字段全部在关联表中的第一张表中
使用Btree索引模拟Hash索引对查询进行优化:
alter table film add title_md5 varchar(32);
update film set title_md5 = md5(title);
create index idx_md5 on film(title_md5);
explain select * from film where title_md5=md5('EGG IGBY') and title='EGG IGBY';# [在不同版本的数据库中有可能不支持]
使用Btree索引模拟Hash索引对查询进行优化的限制:
1. 只能处理键值得全值匹配查找
2. 所使用的Hash函数决定着索引键的大小
通过使用索引优化锁
1. 索引可以减少锁定的行数
2. 索引可以加快处理速度,同时也加快了锁的释放
删除重复和冗余的索引:pt-duplicate-key-checker h=127.0.0.1
查找未被使用的索引:
通过SQL语句查询进行检查:
更新索引统计信息及减少索引碎片:analyze table table_name/optimize table table_name[使用不当时会导致锁表]

转载地址:http://xcmwa.baihongyu.com/

你可能感兴趣的文章
别把机器学习和人工智能搞混了!
查看>>
elasticsearch修改返回窗口的大小
查看>>
JAVA web错误-获取Cookie报错An invalid character [32] was present in the Cookie value
查看>>
maven 仓库配置
查看>>
css内部div无法撑开外部div
查看>>
构造方法和方法重载的区别
查看>>
Cannot forward after response has been committed
查看>>
Java语言学习(五):面向对象入门
查看>>
Linux Shell一些常用记录(一)
查看>>
如何查看CRM WebUI,C4C和Hybris里的页面技术信息
查看>>
spring源码解析上下文初始化ContextLoaderListener
查看>>
用户登陆注册【JDBC版】
查看>>
less安装
查看>>
控制台打印sql
查看>>
spring启动bean加载顺序,控制子线程等待主线程
查看>>
负载均衡集群LVS(及资料)
查看>>
避免使用线程组(73)
查看>>
What will happen when you attempt to compile and run the following code?
查看>>
11.32 php扩展模块装安
查看>>
互联网分布式微服务云平台规划分析--服务监控中心
查看>>