数据库优化 - 多列索引经典题目

题目

假设某个表有一个联合索引(c1,c2,c3,c4)一下——只能使用该联合索引的c1,c2,c3部分

A where c1=x and c2=x and c4>x and c3=x

B where c1=x and c2=x and c4=x order by c3

C where c1=x and c4= x group by c3,c2

D where c1=x and c5=x order by c2,c3

E where c1=x and c2=x and c5=? order by c2,c3

创建表,并创建相应索引,插入数

对于A:

c1=x and c2=x and c4>x and c3=x  <==等价==> c1=x and c2=x and c3=x and c4>x

因此 c1,c2,c3,c4都能用上. 如下:

对于B:

select * from t4 where c1=1 and c2=2 and c4=3 order by c3

c1 ,c2索引用上了,在c2用到索引的基础上,c3是排好序的,因此不用额外排序.

而c4没发挥作用.

如果用c5排序,因为c5不是索引,所以,要额外用到filesort进行排序

对于 C:

只用到c1索引,因为group by c3,c2的顺序无法利用c2,c3索引

D语句:

C1确定的基础上,c2是有序的,C2之下C3是有序的,因此c2,c3发挥的排序的作用.

因此,没用到filesort

E:

这一句等价与 elect * from t4 where c1=1 and c2=3 and c5=2 order by c3;

因为c2的值既是固定的,参与排序时并不考虑

时间: 2024-10-12 12:00:48

数据库优化 - 多列索引经典题目的相关文章

Mysql多列索引经典案例

一个经典的多列索引案例,如题: 假设某个表有一个联合索引(c1,c2,c3,c4)一下--只能使用该联合索引的 c1,c2,c3 部分 Awhere c1=x and c2=x and c4>x and c3=x B where c1=x and c2=x and c4=x order by c3 C where c1=x and c4= x group by c3,c2 D where c1=x and c5=x order by c2,c3 E where c1=x and c2=x and

MySql数据库优化的八种经典方式

1.选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快.因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小. 例如,在定义邮政编码这个字段时,如果将其设置为CHAR(255),显然给数据库增加了不必要的空间,甚至使用VARCHAR这种类型也是多余的,因为CHAR(6)就可以很好的完成任务了.同样的,如果可以的话,我们应该使用MEDIUMINT而不是BIGIN来定义整型字段. 另外一个提高效率的方法

数据库优化之创建索引

索引提供指针以指向存储在表中指定列的数据,然后根据指定的次序排列这些指针,在根据指针到达包含该值的行 什么是索引 数据库中的索引和数据的目录相似,利用目录快速查找所需的信息.在数据库中,索引是某个表中一列或者若干列值的集合,以及物流标识这些值的数据页的逻辑指针清单.是SQL Server编排数据的内部方法,通过索引,可快速查找数据,而无需扫描整个表 索引页是数据库中存储索引的数据页,存放数据行的关键字页以及该数据行的地址指针 索引分类 在SQL Server中,常见的索引有以下六类: 唯一索引:

数据库优化方法

常见的数据库优化方法:索引(数据库),缓存,分表,分库,sql优化. 索引:创建索引一般有以下两个目的:维护被索引列的唯一性和提供快速访问表中数据的策略.95% 的数据库能问题都可以采用索引技术得到解决.索引有助于提高检索性能,但过多或不当的索引也会导致系统低效.因为用户在表中每加进一个索引,数据库就要做更多的工作.过多的索引甚至会导致索引碎片. 缓存:hibernate,spring3有缓存模块 分表:针对每个时间周期产生大量的数据,可以考虑采用一定的策略将数据存到多个数据表中. 分库:就是将

MySQL数据库优化的八种方式(经典必看)

引言: 关于数据库优化,网上有不少资料和方法,但是不少质量参差不齐,有些总结的不够到位,内容冗杂 偶尔发现了这篇文章,总结得很经典,文章流量也很大,所以拿到自己的总结文集中,积累优质文章,提升个人能力,希望对大家今后开发中也有帮助 1.选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快.因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小. 例如,在定义邮政编码这个字段时,如果将其设置为CHAR(2

Mysql数据库优化技术之配置篇、索引篇 ( 必看 必看 转)

转自:Mysql数据库优化技术之配置篇.索引篇 ( 必看 必看 ) (一)减少数据库访问 对于可以静态化的页面,尽可能静态化 对一个动态页面中可以静态的局部,采用静态化 部分数据可以生成XML,或者文本文件形式保存 使用数据缓存技术,例如: MemCached (二)优化的检测方法 1.用户体验检测 2.Mysql状态检测 在Mysql命令行里面使用show status命令,得到当前mysql状态. 主要关注下列属性: key_read_requests (索引读的请求数)(key_buffe

面试技巧,如何通过索引说数据库优化能力,内容来自Java web轻量级开发面试教程

上星期写了一个篇文章,数据库方面的面试技巧,如何从建表方面展示自己能力,承蒙管理员抬举,放入首页,也承蒙各位厚爱,两天内收获了将近770个点击,也一度进入48小时热榜. 为了感谢管理员和大家的支持,再根据我的面试经验原创一篇关于索引方面如何推销自己的文章.这内容也来自我写的书 java web轻量级开发面试教程. 如果我们需要招个Java方面的高级程序员,一方面看年限(本科3年),具体到数据库方面的技能要求,包括如下三个方面: 第一,是否会基本的增删改查,存储过程等技能,是否会用些group b

数据库索引- 多列索引

对复合索引,按照字段在查询条件中出现的频度建立索引.在复合索引中,记录首先按照第一个字段排序.对于在第一个字段上取值相同的记录,系统再按照第二个字段的取值排序,以此类推.因此只有复合索引的第一个字段出现在查询条件中,该索引才可能被使用,因此将应用频度高的字段,放置在复合索引的前面,会使系统最大可能地使用此索引,发挥索引的作用. 二.多列索引适合的场景 1.全字段匹配 2.匹配部分最左前缀 3.匹配第一列 4.匹配第一列范围查询(可用用like a%,但不能使用like %b) 5.精确匹配某一列

mysql 多列索引优化

Mysql所有的列都可以使用索引,.对相关列使用索引是提高SELECT操作性能的最佳途径.根据存储引擎定义每个表的最大索引数和最大索引长度.所有存储引擎支持每个表至少16个索引,总索引长度至少256字节.在索引中使用col_name(length)语法,可以创建一个只使用char和archar列的第一个length个字符的索引,按这种方式只索引列的前缀可以索引文件小的多.MyISAm和INNODb存储引擎还支持对blob和text列的索引,但是必须指定索引长度.fulltext索引用于全文搜索不