MySQL 使用 Filesort 和 Query 很慢?
Posted
技术标签:
【中文标题】MySQL 使用 Filesort 和 Query 很慢?【英文标题】:MySQL using Filesort and Query is very slow? 【发布时间】:2012-04-19 16:52:48 【问题描述】:我有一个问题:
SELECT listings.*, listingagents.agentid
FROM listings
LEFT JOIN listingagents ON (listingagents.id = listings.listingagentid)
LEFT JOIN ignore ON (ignore.system_key = listings.listingid)
WHERE ignore.id IS NULL
ORDER BY listings.id ASC
我正在尝试提高此查询的性能,因为它非常慢并且给 mysql 服务器带来了沉重的负载。
当我做一个mysql解释时,输出显示:
+--------+-------------+----------------+--------+- --------------+------------+---------+------------ ----------------+--------+------------------------ -+ |编号 |选择类型 |表|类型 |可能的键 |关键 | key_len |参考 |行 |额外 | +--------+-------------+----------------+--------+- --------------+------------+---------+------------ ----------------+--------+------------------------ -+ | 1 |简单 |列表 |全部 |空 |空 |空 |空 | 383360 |使用文件排序 | | 1 |简单 |上市代理| eq_ref |初级 |初级 | 4 | db.listings.listingagen... | 1 | | | 1 |简单 |忽略 |参考 |系统密钥 |系统密钥 | 1 |常量 | 404 |使用哪里;不存在 | +--------+-------------+----------------+--------+- --------------+------------+---------+------------ ----------------+--------+------------------------ -+我试着做一个简单的查询:
SELECT listings.*
FROM listings
ORDER BY listings.id ASC
而且那个查询也有“Using filesort;”。
“listings.id”、“listingagents.id”和“ignore.id”字段是主键 “listingagents.id”和“ignore.system_key”字段有索引。
我可以做些什么来改进第一个查询?
【问题讨论】:
如果您对 'select * from Listings order by id asc' 执行 'desc' 会发生什么? 【参考方案1】:尝试通过添加一些条件来减少列表范围(当前为 383360 行)。例如id > x 或限制。
【讨论】:
以上是关于MySQL 使用 Filesort 和 Query 很慢?的主要内容,如果未能解决你的问题,请参考以下文章
MySQL优化order by导致的 using filesort
Mysql(15)—Order By排序的底层原理与filesort排序