2011-04-12 77 views
0

我有以下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) 

回答

4

所以光標/循環,嘗試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,姓名,地址

+0

每天學習新東西。從來沒有聽說伯爵(1)的巫術。我不知道這是否是由一些SEO人創建的... – Thomas 2011-04-12 05:08:17

+0

謝謝! Really Box 9的答案也如下,但是你對「迷信」的解釋和其他信息也有所幫助。 – Mike 2011-04-14 04:11:41

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 
0

連接表大概是要在實踐中,性能更好,我應該認爲。

SELECT people.name, people.address 
FROM people INNER JOIN invoices ON invoices.pid = people.id 

由於OP被編輯而導致編輯:您是否只希望那些只有一張發票的人?如果是這樣,那麼忽視這一點,並看看其他答案之一。