mariadb 获取不带(忽略)参数的SQL查询哈希

icomxhvb  于 2022-11-08  发布在  其他
关注(0)|答案(1)|浏览(119)

我有大量的查询,并希望计算它们的出现次数。

问题:相同的查询可以具有不同的参数。

我想过使用EXPLAIN,然后对数组进行散列。但我想那不会很好用。
有没有办法在不包含参数和“style”(format?) 的情况下获得查询的哈希值?

  • 例如,mysql(mariadb)服务器可以从查询返回预处理语句吗?*
  • (编辑:我没有代码中的预准备语句。我只得到了SQL字符串。)*

简单的例子:
SELECT * FROM foo where bar = 'baz
SELECT * FROMfooWHEREbar= 'baz';
SELECT * FROMfooWHEREbar= 3
SELECT * FROMfooWHEREbar= 3;
...
这是具有不同“样式”和不同参数的同一查询。
我想统计的是SELECT * FROMfooWHEREbar= {.*};的出现次数

  • 注意:查询将包含多个联接、子查询等。*

在这个例子中,我从一个general_log表中得到了这些SQL查询。没有代码,只有SQL字符串。这 * 不是 *“我如何才能做得更好”的问题。这是一个“我如何才能从我得到的结果中得到更好的结果”的问题。

ff29svar

ff29svar1#

您可以通过performance_schema中的“digest”(一种查询的匿名版本,其中所有常量值都替换为?)来获取查询的计数。

SELECT
SCHEMA_NAME,
digest,
digest_text,
round(sum_timer_wait/ 1000000000000, 6),
count_star
FROM performance_schema.events_statements_summary_by_digest
ORDER BY sum_timer_wait DESC LIMIT 10;

请参阅https://www.percona.com/blog/2015/10/13/mysql-query-digest-with-performance-schema/以获取有关此解决方案的博客。

相关问题