当我对我的查询进行解释时
我看到第一行的“额外”下有“使用临时;使用文件排序”。我知道这很糟糕,但我不知道它到底意味着什么或如何解决它。
如果您想查看我的查询,这是我针对同一查询提出的更普遍的问题:MySQL 查询优化和菜鸟解释 https://stackoverflow.com/questions/4934614/mysql-query-optimization-and-explain-for-a-noob。
作为参考,该查询涉及 24 个表和 23 个联接。
我现在的问题是:
- “使用临时”和“使用文件排序”是什么意思?
- 假设它们是坏的,我该如何摆脱它们?
正如已经说过的,“使用文件排序”和“使用临时”并不总是意味着性能不佳。
Here http://dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html是提高 ORDER BY 语句性能的一些基本准则。亮点:
如果您想提高 ORDER BY 速度,请检查是否可以让 MySQL 使用索引而不是额外的排序阶段。如果这不可能,您可以尝试以下策略:
增加尺寸
sort_buffer_size 变量。
增加尺寸
read_rnd_buffer_size 变量。
通过将列声明为容纳存储在其中的值所需的大小,可以减少每行使用的 RAM。例如,如果值不超过 16 个字符,则 CHAR(16) 优于 CHAR(200)。
首先尝试使用索引(确保要排序的字段有索引)。注意增加系统变量排序缓冲区大小 http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_sort_buffer_size and read_rnd_buffer_size http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_read_rnd_buffer_size也可能对其他查询产生负面影响 - 考虑专门为您需要它们的会话设置它们,并将它们保留为所有其他会话的默认值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)