mysql - 我的sql查询对简单查询的优化

标签 mysql optimization

我有疑问

SELECT r.*,u.name AS name, u.username AS username 
FROM jos_js_res_record AS r 
LEFT JOIN jos_users AS u on u.id = r.user_id 
LEFT JOIN jos_js_res_record_values AS f on f.record_id = r.id AND f.field_type = 'digits'
AND f.field_label = 'Price' 
WHERE r.section_id = 2 
AND MATCH (fieldsdata) AGAINST ('article' IN NATURAL LANGUAGE MODE) 
AND r.title like 'A%' 
ORDER BY f.field_value + 0 desc, f.field_value desc 

我不知道为什么,但它在解释中产生“使用在哪里;”使用临时的;使用文件排序。我尽了我所知道的一切来优化这个查询,但没有结果。据我了解,这是因为加入了 jos_js_res_record_valuesORDER BY 。如果我注释 ORDER BY 或将其更改为 ORDER BY r.created 使用临时消失。

最佳答案

一旦您执行任何类型的 ORDER BY 操作并使用函数/数学 (+0) 修改值,您将强制 MySQL 对结果集中的每个字段进行转换,这就是为什么您正在获取临时

您能否发布您的表结构,以便我们了解您拥有哪些索引和字段类型?

关于mysql - 我的sql查询对简单查询的优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8355567/

相关文章:

mysql - 拆分表以获得性能?

performance - 相对性能 : lisp map vs loop functions

php - php 的分支预测

mysql - 聚类具有相同列的数据并合并其参数并删除其他条目

php - javascript加密?

C# asp.net 使用mysql数据库的值动态创建多个复选框

.net - YUI 压缩器和 .NET 应用程序

Mysql只提取字母字符

mysql - 了解 MySQL 解释, `rows` -wise

optimization - 如何强制mysql在特定时间段内缓存查询?