我有一个SQL查询,我认为没有足够优化。我计时,有时需要1.5秒才能完成,这似乎有点高,不是吗?如何优化SQL查询?
反正这是查询:
SELECT id, link, feed, category, description, title, GROUP_CONCAT(tag) as t, published
FROM items
LEFT JOIN tags ON items.id = tags.item_id
WHERE id NOT IN (
SELECT item_id
FROM tags, sinunim
WHERE tag = name
AND op = '1'
AND user = '$user_cookie'
) AND id NOT IN (
SELECT id
FROM sinunim
WHERE id <> 0
AND user = '$user_cookie'
) AND id NOT IN (
SELECT i.id
FROM sinunim s, items i
WHERE s.type = 'category'
AND s.name = i.category
AND s.op = '1'
AND s.user = '$user_cookie'
) AND id NOT IN (
SELECT i.id
FROM `sinunim` s, items i
WHERE s.name = i.feed
AND s.op = '1'
AND s.user = '$user_cookie'
)
GROUP BY items.title
ORDER BY items.published DESC
LIMIT 0 , 50
你应该使用内连接,而不是交叉与在(FROM表1,表2,其中..是一个交叉连接)加入 – 2012-08-16 12:37:05
无意冒犯,但我认为所有优化会谈应以展开的“EXPLAIN”结果开始。 )是的,通过嵌套查询加入看起来不太正确。 – raina77ow 2012-08-16 12:37:31
@ElVieejo技术上它(交叉或内部)取决于在WHERE块中指定的标准。不过,我同意重写它会更可读。 – raina77ow 2012-08-16 12:39:11