我有一个问题:
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”字段具有索引。
如何改善第一次查询?
答案 0 :(得分:0)
尝试通过添加一些条件来减少列表范围(当前为383360行)。例如id> x或限制。