SQL-запрос душит сервер - PullRequest
       2

SQL-запрос душит сервер

0 голосов
/ 06 октября 2011

Когда я выполняю этот запрос, использование процессора MySQL Server остается на 100% и заглушает сервер. Что я делаю не так?

SELECT * 
FROM projects p, orders o, invoices i
WHERE p.project_state =  'product'
AND (
p.status =  'expired'
OR p.status =  'finished'
OR p.status =  'open'
)
AND p.user_id =  '12'
AND i.projectid =0
GROUP BY i.invoiceid
LIMIT 0 , 30

Ответы [ 3 ]

5 голосов
/ 06 октября 2011

Вы включаете таблицу заказов, но не присоединяетесь к ней. Это создаст полное перекрестное соединение, которое потенциально может привести к миллионам строк.

0 голосов
/ 06 октября 2011

Вы не ставили никаких соединений на столы. Я считаю, что по умолчанию это будет перекрестное соединение. Это означает, что если у вас есть 1000 проектов, 100 000 заказов и 100 000 счетов, набор результатов будет 1 000 000 000 000 (1 триллион) записей.

Возможно, вы хотите поместить некоторые внутренние соединения между этими таблицами.

0 голосов
/ 06 октября 2011

Используйте EXPLAIN, чтобы узнать план запроса. Из этого вы можете решить, какие индексы будут необходимы. Эти индексы значительно улучшат производительность.

Также вы никоим образом не ограничиваете заказы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...