我有以下SQL查詢,由於where子句中的select count(1)語句而執行非常糟糕。任何人都可以提出一種方法來加速這一點嗎?這個想法是,我只希望在發現一個發票的地方返回行。SQL Select Where Where Clause性能問題
SELECT people.name, people.address
FROM people
WHERE ((SELECT COUNT(1) FROM invoices WHERE invoices.pid = people.id)=1)
我有以下SQL查詢,由於where子句中的select count(1)語句而執行非常糟糕。任何人都可以提出一種方法來加速這一點嗎?這個想法是,我只希望在發現一個發票的地方返回行。SQL Select Where Where Clause性能問題
SELECT people.name, people.address
FROM people
WHERE ((SELECT COUNT(1) FROM invoices WHERE invoices.pid = people.id)=1)
所以光標/循環,嘗試JOIN像這樣
SELECT people.name, people.address
FROM
people
JOIN
invoices ON invoices.pid = people.id
GROUP BY
people.name, people.address
HAVING
COUNT(*) = 1
我還希望你有指標,至少在invoices.pid和people.pid,姓名,地址
使用JOIN
:
SELECT people.name, people.address
FROM people
JOIN invoices ON invoices.pid = people.id
GROUP BY people.name, people.address
HAVING Count(*) = 1
連接表大概是要在實踐中,性能更好,我應該認爲。
SELECT people.name, people.address
FROM people INNER JOIN invoices ON invoices.pid = people.id
由於OP被編輯而導致編輯:您是否只希望那些只有一張發票的人?如果是這樣,那麼忽視這一點,並看看其他答案之一。
每天學習新東西。從來沒有聽說伯爵(1)的巫術。我不知道這是否是由一些SEO人創建的... – Thomas 2011-04-12 05:08:17
謝謝! Really Box 9的答案也如下,但是你對「迷信」的解釋和其他信息也有所幫助。 – Mike 2011-04-14 04:11:41