2014-12-03 2 views
1

Допустим, у меня есть таблица под названием customers и таблицу с именем customer_billsMySQL Join или Subquery при использовании функций?

И я хочу рассчитывать счета клиента.

У меня есть функция, которую я создал, называется 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

ответ

0

Sub-запросы всегда медленны, чем соединения. Поэтому вы не должны использовать функцию для такой легкой ситуации. Вы можете использовать этот запрос .

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