作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在查询中,如果我使用 LIKE '<value>%'
在主键上它表现良好,使用索引:
Operator | Rows returned | Executions | Latency
-- | -- | -- | --
Serialize Result 32 1 1.80 ms
Sort 32 1 1.78 ms
Hash Aggregate 32 1 1.73 ms
Distributed union 32 1 1.61 ms
Hash Aggregate 32 1 1.56 ms
Distributed union 128 1 1.34 ms
Compute - - -
FilterScan 128 1 1.33 ms
Table Scan: <tablename> 128 1 1.30 ms
尽管如此,使用 LIKE '<value>_'
执行全表扫描:
Operator | Rows returned | Executions | Latency
-- | -- | -- | --
Serialize Result | 32 | 1 | 76.27 s
Sort | 32 | 1 | 76.27 s
Hash Aggregate | 32 | 1 | 76.27 s
Distributed union | 32 | 1 | 76.27 s
Hash Aggregate | 32 | 2 | ~72.18 s
Distributed union | 128 | 2 | ~72.18 s
Compute | - | - | -
FilterScan | 128 | 2 | ~72.18 s
Table Scan: <tablename> (full scan: true) | 13802624 | 2 | ~69.97 s
查询如下所示:
SELECT
'aggregated-quadkey AS quadkey' AS quadkey, day,
SUM(a_value_1), SUM(a_value_2), AVG(a_value_3), SUM(a_value_4), SUM(a_value_5), AVG(a_value_6), AVG(a_value_6), AVG(a_value_7), SUM(a_value_8), SUM(a_value_9), AVG(a_value_10), SUM(a_value_11), SUM(a_value_12), AVG(a_value_13), AVG(a_value_14), AVG(a_value_15), SUM(a_value_16), SUM(a_value_17), AVG(a_value_18), SUM(a_value_19), SUM(a_value_20), AVG(a_value_21), AVG(a_value_22), AVG(a_value_23)
FROM <tablename>
WHERE quadkey LIKE '03201012212212322_'
GROUP BY quadkey, day ORDER BY day
最佳答案
对于匹配 LIKE 模式的前缀(column LIKE 'xxx%'
),查询优化器在内部将条件转换为 STARTS_WITH(column, 'xxx')
,即然后使用索引。
所以原因可能是因为查询优化器不够聪明转换匹配 LIKE 模式的精确长度前缀
column LIKE 'xxx_'
进入组合条件:
(STARTS_WITH(column, 'xxx') AND CHAR_LENGTH(column)=4)
类似的模式,如
`column LIKE 'abc%def'`
没有优化到组合条件:
`(STARTS_WITH(column,'abc') AND ENDS_WITH(column,'def'))`.
您始终可以通过使用上述条件优化 SQL 生成中的查询来解决此问题。
(这是假设 LIKE 模式是查询中的字符串值,而不是参数 - LIKE
使用参数无法优化,因为该模式在查询编译时未知。)
关于google-cloud-platform - 为什么 Spanner 在 LIKE 中使用下划线执行全表扫描,而使用 % 则利用索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57069857/
我在尝试获取我想要的结果集时遇到了一些问题。基本上我有这两个表: phonemanager_defaults | id | tag | number | |--
我是一名优秀的程序员,十分优秀!