- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我很好奇多列索引的前导列的概念。
我正在使用这个示例 dvdrental分贝。
这是查询:
SELECT
title,
length,
rating,
replacement_cost,
rental_rate
FROM film
WHERE length BETWEEN 60 AND 70
AND rating = 'G';
我有两个正在使用的索引:
#1
CREATE INDEX IF NOT EXISTS film_idx_length_rating
ON film(length, rating);
#2
CREATE INDEX IF NOT EXISTS film_idx_rating_length
ON film(rating, length);
在创建两个索引后,计划者选择索引进行计划:
QUERY PLAN
Bitmap Heap Scan on film (cost=4.47..39.34 rows=15 width=34) (actual time=0.020..0.033 rows=18 loops=1)
Recheck Cond: ((rating = 'G'::mpaa_rating) AND (length >= 60) AND (length <= 70))
Heap Blocks: exact=14
-> Bitmap Index Scan on film_idx_rating_length (cost=0.00..4.46 rows=15 width=0) (actual time=0.015..0.015 rows=18 loops=1)
Index Cond: ((rating = 'G'::mpaa_rating) AND (length >= 60) AND (length <= 70))
Planning Time: 0.202 ms
Execution Time: 0.065 ms
执行了查询计划EXPLAIN ANALYZE
,规划器选择了第二个查询,但是来自两个索引的查询计划实际上并没有任何显着差异,只有规划器选择的索引。这是为什么?为什么当 rating
用作前导列时,它被选中而不是 length
作为前导列?
来自docs有这个:
A multicolumn B-tree index can be used with query conditions that involve any subset of the index's columns, but the index is most efficient when there are constraints on the leading (leftmost) columns. The exact rule is that equality constraints on leading columns, plus any inequality constraints on the first column that does not have an equality constraint, will be used to limit the portion of the index that is scanned.
但是我不是很明白,也许有人可以给我举个例子?
谢谢!
最佳答案
在您开始看到有意义的差异之前,您可能需要使表格比该链接处的表格大几千倍。
对于以相等列开头的索引,可以跳转到索引内的'G'段,然后可以跳到60的长度,向前读,直到超过70,所有这些行都会满足两种资格。
但是对于另外一个索引,不能直接跳到60,然后跳到G段,因为没有单独的G段。 60 到 70 之间的每个不同值都有一个 G 部分。所以它最终要做的是扫描从 60 到 70 的所有行,单独过滤掉不是 G 的行。
事实证明差别并不大,因为大部分时间都花在了访问表堆以从表中获取所需的数据上,在这种情况下,需要为任一索引访问同一组行。
关于postgresql - Postgres - 多列索引 - 前导(最左边)列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64196836/
我正在开发一个需要在屏幕上查找对象的程序,到目前为止工作正常,但我遇到了多显示器配置问题。 GraphicsEnvironment.getLocalGraphicsEnvironment().getS
使用 mySql,我想列出客户对特定产品类别进行的所有购买。 所以,我有 3 个表:客户 (idCustomer, Name)、类别 (idCategory, CategoryName) 和订单 (i
我的网站上有一个关于 background-size:cover 的小问题我一直在 Firefox 中测试它,但是当我在谷歌浏览器中加载页面时,我在左边得到 1px 的白色。当我使用 backgrou
我已经搜索了几个小时来找到解决我的问题的方法,但没有成功。我遇到的问题是两个按钮的垂直堆叠。 这就是我想要做的:它说按钮在这里两次是我试图放置按钮的地方,但我所能做的就是让它们水平排列而不是垂直排列。
我有一个包含多个元素的导航栏。 Left1 Left2 Left3 Right1 Right2 Right3 我不知道如何将“fixedLef
您好,我正在尝试让 2 个 div 在左侧与右侧对齐。 #div1 #div2 #div1 #div2 #div3 #div2 #div3 #div3 诀窍是当浏览器窗口变小时,我希望#div2 位于
body { font-family: Arial, Helvetica, sans-serif; font-size: 13px;
这个问题在这里已经有了答案: In CSS Flexbox, why are there no "justify-items" and "justify-self" properties? (6
这是我的代码的 jsfiddle 链接: https://jsfiddle.net/Krisalay/zvxxeagh/ 我的 HTML 代码是: MESSAGE 1
所以我有 10 个复选框,每个标签都取自数组中相应的索引。我正在使用 ng-repeat 来展示它们: {{entity}}
我是一名优秀的程序员,十分优秀!