2014-12-03 11 views
1

可以說我有一個名爲customers表和一個名爲customer_bills當使用函數時MySQL加入或子查詢?

表,我想算客戶的賬單。

我有一個函數,我已經建立了所謂的countBills,它得到(int)input,它裏面返回(SELECT count(id) FROM customer_bills WHERE customerId = input)

當我使用SELECT id, countBills(id) FROM customers

這是怎麼回事?

是否SELECT id, (SELECT COUNT(id) FROM customer_bills) FROM customers

或者是SELECT id, count(customer_bills.id) FROM customers JOIN customer_bills ON customer.id = customer_bills.customerId

因此,在短期,用MySQL知道如何使用功能時,作爲已知聯接是優化查詢比子查詢快?

+0

首先是接近現實比第二。但我的建議是避免使用這種功能!該函數可以做一些計算,但不要把它放在這樣的子查詢中 - 否則結果是緩慢和沉重的查詢。 – i486 2014-12-03 10:27:33

回答

0

子查詢總是比聯接慢。所以你不應該使用函數來處理這種簡單的情況。您可以使用此查詢,您可以使用 。

SELECT c.id, count(cb.id) FROM customers c JOIN customer_bills cb ON c.id = cb.customerId group by c.id;