Время выполнения MySQL - PullRequest
1 голос
/ 28 июня 2011

Мне нужна помощь, чтобы сократить время выполнения этого запроса.7 секунд кажется слишком длинным для таблицы с 1500 строками.

  SELECT parent
    FROM video
   WHERE parent NOT IN (SELECT parent
                          FROM video
                         WHERE filename REGEXP '(s[0-9]{2}\e[0-9]{2})|([[:<:]][0-9]{3}[[:>:]])')
GROUP BY parent

Ответы [ 2 ]

5 голосов
/ 28 июня 2011

Во-первых, вы можете использовать NOT REGEXP вместо подзапроса.

SELECT parent
FROM video
WHERE filename NOT REGEXP '(s[0-9]{2}\e[0-9]{2})|([[:<:]][0-9]{3}[[:>:]])'
GROUP BY parent

При использовании REGEXP или NOT REGEXP индексы не имеют значения. Чтобы сделать его более эффективным, если этого еще недостаточно, вам придется взглянуть на использование других строковые функции или оператор LIKE.

2 голосов
/ 28 июня 2011

Две быстрые вещи:

  • Убедитесь, что столбец parent проиндексирован.
  • Отбросьте регулярное выражение. Если можете, используйте LIKE или другую строковую функцию .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...