【发布时间】:2015-06-09 19:53:14
【问题描述】:
我有一个选择查询,它按字母顺序返回与给定 ID 相关的下一条记录:
SELECT *
FROM contacts
WHERE client_id = 22844
AND deleted_at IS NULL
AND
(
(
last_name = (
SELECT last_name
FROM contacts
WHERE client_id = 22844 AND id = 717604
)
AND first_name > (
SELECT first_name
FROM contacts
WHERE client_id = 22844 AND id = 717604
)
)
OR (
last_name > (
SELECT last_name
FROM contacts
WHERE client_id = 22844 AND id = 717604
)
)
)
ORDER BY last_name, first_name
LIMIT 1
first_name、last_name、deleted_at 和 client_id 有单独的索引。
有什么方法可以重写它以提高效率吗?当前,当特定客户有大约 3000 个联系人时,大约需要 250 毫秒 - 300 毫秒。
目前使用mysql 5.5
编辑:
如果我忽略 deleted_at IS NULL 条件,结果会快一个数量级。我可能会停止使用软删除并将已删除的记录移至存档。
【问题讨论】:
标签: mysql sql query-optimization