high performence mysql读书笔记
----------------------------
P165
choosing a good column order
我们已经看到的疑惑的一个最常见的原因是索引中字段的顺序。正确的顺序取决于将会使用这个索引的查询,并且你必须考虑怎样选择索引的顺序,以使数据行以一种有助于查询的方式被排序和分组。(这节适用于B-tree索引。顺便的提一下,hash索引和其他的索引并不像B-tree索引那样以有序的方式存储数据。)
多字段B-tree索引中的字段顺序意味着索引首先会按最左边的字段排序,接着是按下一个字段,以此类推。因此,索引可以按正向或反向的顺序被扫描,以满足那些带有order by、group by和distinct等与字段顺序准确匹配的表达式的查询。
因此,字段的顺序在多列索引中是极其重要的。字段顺序要么有助于要么阻止索引获得Lahdenmaki和Leach的三星级系统中"星级"。通过本章余下的章节,我们会展示许多它将如何工作的例子。
有一个被接受的选择字段顺序的古老的准则:把经常用来选择的那些字段放到索引的开头。这条建议有多有用?它在一些场合是有帮助的,但是全面来看,它通常远没有避免随机I/O和排序重要。(具体情况不同,所以并没有一个通用的准则。这仅能告诉你这条被接受的准则可能没有你想的那样重要。)
将最具有选择性的字段放在开头,在不考虑分组或排序的时候可能是个好主意,这样,索引的目的只是用来优化where查找。在这样的情况下,这样设计索引以便尽快的过滤数据行可能确实工作的很好,所以这样做对于在where子句中仅仅指定一个索引前缀的查询更有选择性。然而,这不仅仅取决于所有候选字段的选择性,而且取决于你用来查询的值。这与我们选择一个好的前缀长度时的考虑是一个类型.你可能真的需要选择字段的顺序,以便使经常运行的查询具有尽可能的选择性。
让我们用以下的查询举例说明:
select * from payment where staff_id=2 and customer_id=584
我们应该在(staff_id,customer_id)上创建索引,还是采用相反的顺序?我们可以运行一些快速的查询来帮助检查table里值的分布,然后决定哪些column具有更高的selectivity.让我们把这个查询转成计算where子句里每个谓词的基数:
select sum(staff_id=2),sum(customer_id=584) from paymment\G
-----------------------------
sum(staff_id=2):7992
sum(customer_id=584):30
根据经验,我们应该把customer_id放在索引的第一位,因为这个谓词能匹配到表中更少的数据行。接着我们能再次执行查询,来看看
分享到:
相关推荐
第一章:加载和执行 浏览器的JavaScript的引擎是编译器层的优化; 当浏览器执行JavaScript代码时,不能同时做其他任何事情(单一进程),意味着[removed]标签每次出现都霸道地让页面等带脚本的解析和执行(每个文件...
performence.rarperformence.rarperformence.rarperformence.rar
Oracle 12.1 DB 性能调优
prcess_performence.rar visual c++ 是实现的进程调度演示程序
Intel VTune Performence Analyzer 9.0.009 的licence
> high performence > easy integration > small size (only 45k~ by proguard) > * open source Gradle compile('com.jayfeng:lesscode-core:2.1') Features 源码 备注 ActivityLess Activity相关辅助类:去...
oracle 性能调优 ,对大家有帮助我的资源就没白上传。
GC friendly programming Garbage Collection (GC) Concepts • Programming Tips • Problems With Finalization • Using Reference Objects • Conclusions
基于时偏误差的C-RAN性能评估,李志成,牛凯,近些年,人们对无线通信的需求越来越大,这使得运营商开始寻求新的网络架构,比如C-RAN。C-RAN使大规模的集中式处理和无线协作变得��
Linux调试技术和性能调优手段,chm格式
绩效记分卡Performance Scrorecard是一个Chrome扩展程序,可以分析网页以获得最佳性能。 分析页面仅需几秒钟,最后,您将获得该页面的总体得分以及有关应解决该页面哪些方面以提高性能的详细报告。...
介绍了SQL Server2005内存相关的调优技术.