2010-09-02 2 views
2

надеюсь, что вы сможете помочь мне на правильном пути, чтобы начать оптимизацию моих запросов. Раньше я никогда не думал слишком много об оптимизации, но у меня есть несколько запросов, похожих на приведенный ниже, и вы хотите сосредоточиться на повышении их эффективности. Пример запроса, который я очень нужно оптимизировать следующим образом:Помощь по оптимизации запросов MySQL

SELECT COUNT(*) AS `records_found` 

FROM (`records_owners` AS `ro`, `records` AS `r`) 

WHERE r.reg_no = ro.contact_no 

AND `contacted_email` <> "0000-00-00" 

AND `contacted_post` <> "0000-00-00" 

AND `ro`.`import_date` BETWEEN "2010-01-01" AND "2010-07-11" AND `r`.`pa_date_of_birth` > "2010-01-01" AND EXISTS (SELECT `number` FROM `roles` WHERE `roles`.`number` = r.`reg_no`) 

Запуск EXPLAIN на вышесказанном производит следующее:

| id | select_type  | table | type | possible_keys | key  | key_len | ref         | rows | Extra  | 

+----+--------------------+-------+--------+---------------+---------+---------+---------------------------------------+-------+-------------+ 

| 1 | PRIMARY   | r | ALL | NULL   | NULL | NULL | NULL         | 21533 | Using where | 

| 1 | PRIMARY   | ro | eq_ref | PRIMARY  | PRIMARY | 4  |   r.reg_no |  1 | Using where | 

| 2 | DEPENDENT SUBQUERY | roles | ALL | NULL   | NULL | NULL | NULL         | 189 | Using where | 

ответ

1

Как вы можете видеть, у вас есть зависимый подзапрос, который является одним из худших в производительности в MySQL. Смотрите здесь советы:

http://dev.mysql.com/doc/refman/5.0/en/select-optimization.html

http://dev.mysql.com/doc/refman/5.0/en/in-subquery-optimization.html

+0

Спасибо MCHL. Заменили подзапросы объединением и значительно ускорили запросы. Должен ли я также смотреть на добавление индексов в приведенные выше таблицы? – ted776

+0

Да, вы должны. – Mchl

Смежные вопросы