0

我有一个查询:

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

并且该查询也有“使用文件排序;”。

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

我可以做些什么来改进第一个查询?

4

1 回答 1

0

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

于 2012-04-19T17:01:55.790 回答