gpt4 book ai didi

sql - 在 latin1 中查询速度快,在 utf8 中查询速度慢 - 为什么?

转载 作者:行者123 更新时间:2023-11-29 01:04:56 25 4
gpt4 key购买 nike

我有一个类似这样的查询:

 SELECT DISTINCT table1.id, {long list of fields} FROM table1 
INNER JOIN table2 ON table1.table2_id = table2.id
{... more joins ...}
LEFT JOIN table_last ON table_last.id=some_table.last_id
WHERE ( table_last.id IS NULL) AND {...more conditions...}
ORDER BY table1.date_entered desc LIMIT 0,6

当使用 latin1 作为客户端字符集运行时,同一数据库上的此查询运行良好(<1s 运行时),并且在 SET NAMES 'utf8' 之后非常慢(无法等待它完成) >。查询返回 70 行(当然是限制之前的部分),因此结果集大小应该不是问题。我检查了所有连接中的所有表,它们似乎都将 UTF-8 作为其字符集(我使用 SHOW TABLE CREATE 检查)。

什么会导致这种奇怪的行为?在这种情况下,utf8 怎么比 latin1 差这么多?在相关的情况下,ID 字段到处都是 char(36),并且连接具有基于此类字段、整数字段和 varchar 字段的条件。

附言我知道 DISTINCT 可能需要一些时间,但我无法删除它,而且它有 70 行,而且它在默认 (latin1) 设置下很快!所以它看起来像是查询之外的东西,但是什么?

最佳答案

当您使用 utf8 为我们编制表格时,它会为每一行分配 3 倍的 varchar 长度(256 * 3 = 768 字节)!

这意味着您的查询会占用更多资源,因为字符串占用的空间是原来的三倍 - 因此缓冲区不会那么大,如果同时进行许多查询,您可能不得不换出 -这会进一步降低您的查询/服务器的性能。

关于sql - 在 latin1 中查询速度快,在 utf8 中查询速度慢 - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4834706/

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