`

high performence mysql读书笔记

 
阅读更多
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放在索引的第一位,因为这个谓词能匹配到表中更少的数据行。接着我们能再次执行查询,来看看






分享到:
评论

相关推荐

    High Performance JavaScript(高性能JavaScript)读书笔记分析

    第一章:加载和执行 浏览器的JavaScript的引擎是编译器层的优化; 当浏览器执行JavaScript代码时,不能同时做其他任何事情(单一进程),意味着[removed]标签每次出现都霸道地让页面等带脚本的解析和执行(每个文件...

    Oralce 12.1 DB performence

    ### Oracle 12.1 数据库性能调优详解 #### 一、引言 Oracle数据库作为全球领先的关系型数据库管理系统之一,在企业级应用中扮演着至关重要的角色。随着业务量的增长和技术的发展,如何确保Oracle数据库在高负载下仍...

    Android代码-LessCode

    > high performence > easy integration > small size (only 45k~ by proguard) > * open source Gradle compile('com.jayfeng:lesscode-core:2.1') Features 源码 备注 ActivityLess Activity相关辅助类:去...

    performence.rar

    "performence.rar"这个压缩包文件的标题和标签都强调了性能优化的主题,暗示了里面的内容可能与提高代码运行效率有关。通过查看文件列表,我们可以看到一篇关于使用Python的`profile`模块进行性能分析的文章以及一个...

    prcess_performence.rar_visual c

    在这个名为"prcess_performence.rar"的压缩包中,包含了多个源代码文件,它们构成了一个完整的Visual C++项目。以下是主要的文件及其功能: 1. AniCur.ani:这通常是一个动画光标文件,可能用于在程序运行时提供...

    Intel_VTune_Performence_Analyzer_9.0.009_licence

    《深入理解Intel VTune性能分析器9.0.009版许可证》 Intel VTune Performance Analyzer是一款由Intel公司推出的高性能计算与应用分析工具,它主要用于优化和调试基于Intel架构的系统,包括CPU和GPU。...

    oracle performence tuning

    ### Oracle性能调优知识点 #### 一、Oracle性能调优概览 在Oracle数据库的管理与维护过程中,性能调优是一项至关重要的任务。通过合理的优化措施可以显著提高系统的响应速度和处理能力,从而更好地满足业务需求。...

    student_academic_performence-数据集

    标题 "student_academic_performance-数据集" 暗示我们关注的是一个与学生学业成绩相关的数据集。这个数据集很可能是教育研究或数据分析项目中使用的,用于探索影响学生学术表现的因素,或者进行预测模型的构建。...

    Linux_Debugging_and_Performance_Tuning_Tips_and_Techniques Part1

    Linux调试技术和性能调优手段,chm格式

    PerformanceScorecard:受社区支持的PageSpeed Insights Chrome扩展程序的正式版本

    绩效记分卡Performance Scrorecard是一个Chrome扩展程序,可以分析网页以获得最佳性能。 分析页面仅需几秒钟,最后,您将获得该页面的总体得分以及有关应解决该页面哪些方面以提高性能的详细报告。...

    Oracle Database 12c Release 2 Performance Tuning Tips and Techniques

    ### Oracle Database 12c Release 2性能调优技巧与技术 #### 一、引言 随着企业数据量的不断增长和技术的快速发展,确保数据库高效运行成为IT部门的一项关键任务。Oracle Database 12c Release 2(简称12c R2)...

    SQL Server 2005内存调优

    ### SQL Server 2005 内存调优关键技术解析 #### 一、引言 在数据库管理系统(DBMS)的运维过程中,SQL Server 2005 的性能优化是确保系统稳定运行的关键之一。其中,内存管理尤其重要,因为它直接影响到数据查询...

Global site tag (gtag.js) - Google Analytics