高性能MySQL中的三星索引
2015-06-13 12:17
459 查看
高性能MySQL中的三星索引
我对此提出了深深的疑问:一星:相关的记录指的是什么??(相关这个词很深奥,“相关部门”是什么部门)
二星:如果建立了B-Tree(B+Tree)索引,数据就有序了。
三星:索引的列包含了查询需要所有的列?根本不需要在where查询条件所有的列上建立索引!
我认为一星和二星的rows应该是columns,索引不关具体的数据行,只与查询的列有关。这样也与High Performance MySQL 后面提到的多列索引的观点相符合,特别是二星评估。
个人的观点:
评估一个索引是否适合某个查询的“三星系统”(three-start system):
一星:索引将相关的列放到一起,即在一系必要的列上建立索引,不必为在where条件里面的列都建立索引。
二星:索引中的数据列顺序和查找中排列顺序一致。通常将选择性最高的列放到索引的最前列。
三星:索引中的列包含了查询中需要的全部列。索引包含查询所需要的数据列,不再进行全表查表(聚簇索引、覆盖索引)。
参考资料:
《高性能MySQL》中文第三版
《High Performance MySQL (3rd Edition)》英文第三版
SQL量化方法
u CASE 3:三星索引(lname,city,fname,cno)
RT = 1 * 10ms + 1000*0.1ms = 0.1 s
一次随机读取,1000次行扫描
u CASE 4:二星索引(lname,city,fname)
RT = 1 * 10ms + 1000 * 0.1ms + 1000 * 10ms= 10.11s
一次随机读取,1000行扫描,1000次随机IO
u CASE 5:一星索引(lname,city)
RT= 1 * 10ms + 1000 * 0.1ms + 1000 * 10ms + 1000 * 0.01ms=10.12s
一次随机读取,1000行扫描,1000次随机IO,1000行排序
相关文章推荐
- mysql win源码比较大 不需要的文件删除 记录下来
- mha+mysql自动切换
- MySQL常用
- mysql日志
- slave中继日志损坏如何处理
- mysql gtid初探
- 在 mysql 中利用 Duplicate key, 一句话实现存在的更新不存在插入功能
- mysql存入中文乱码
- 记录下mysql的一些常识
- mySQL远程访问
- mysql表格拆分总结
- mysql中的comment用法
- mysql 的表名和列名设计时应该注意的一个问题
- MySQL+DRBD+heartbeat+LVS+keepalived
- php操作mysqli(示例代码)
- Mysql 分区 ------ Innodb 表引擎
- MySQL Server 5.5.44免安装版配置详解
- Mysql存储过程
- mysql学习笔记_函数
- mysql 编码测试