使用Filesort和Query的MySQL速度很慢?

时间:2012-04-19 16:52:48

标签: mysql

我有一个问题:

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解释时,输出显示:

+--------+-------------+---------------+--------+---------------+------------+---------+----------------------------+--------+-------------------------+
|     id | select_type |     table     |  type  | possible_keys |    key     | key_len |            ref             |  rows  |          Extra          |
+--------+-------------+---------------+--------+---------------+------------+---------+----------------------------+--------+-------------------------+
|      1 | SIMPLE      | listings      | ALL    | NULL          | NULL       | NULL    | NULL                       | 383360 | Using filesort          |
|      1 | SIMPLE      | listingagents | eq_ref | PRIMARY       | PRIMARY    | 4       | db.listings.listingagen... |      1 |                         |
|      1 | SIMPLE      | ignore        | ref    | system_key    | system_key | 1       | const                      |    404 | Using where; Not exists |
+--------+-------------+---------------+--------+---------------+------------+---------+----------------------------+--------+-------------------------+

我尝试做一个简单的查询:

SELECT listings.*
FROM listings
ORDER BY listings.id ASC

该查询还有“使用filesort;”。

字段“listings.id”,“listingagents.id”和“ignore.id”是主键 “listingagents.id”和“ignore.system_key”字段具有索引。

如何改善第一次查询?

1 个答案:

答案 0 :(得分:0)

尝试通过添加一些条件来减少列表范围(当前为383360行)。例如id> x或限制。