gpt4 book ai didi

mysql - Percona 查询指纹 - 为什么选择列中的顺序很重要?

转载 作者:行者123 更新时间:2023-11-30 21:40:54 25 4
gpt4 key购买 nike

假设我有两个查询:

SELECT name, description FROM items WHERE id = 5;
SELECT description, name FROM items WHERE id = 5;

当我使用来自 Percona Toolkitpt-fingerprint 时在这些查询中,他们给出了不同的指纹:

select name, description from items where id = ?;
select description, name from items where id = ?;

既然它们本质上是相同的查询,它们不应该给出相同的指纹吗?我错过了什么吗?

最佳答案

是的,您是对的,查询选择列表中列的顺序对性能没有影响。

但是将这两个查询视为相同的指纹可能会掩盖查询的来源。

假设您有这两个查询,每个查询都在您应用程序的不同部分。您可能想知道哪个负责 40% 的查询负载,哪个只负责 2% 的查询负载。

如果它必须像您描述的那样检测列的交换性,那么生成查询的指纹也会复杂得多。这也适用于 WHERE 子句中的 bool 项,并且在某种程度上适用于 FROM 子句中连接表的顺序,以及 UNION 中联合查询的顺序。

fingerprint() 的代码只有大约 100 行代码,用于执行使用正则表达式实现的模式匹配。执行您描述的操作需要一个成熟的 SQL 解析器。请参阅此处的代码:https://github.com/percona/percona-toolkit/blob/3.0/lib/QueryRewriter.pm

关于mysql - Percona 查询指纹 - 为什么选择列中的顺序很重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51675926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com