У меня есть таблица, которая содержит следующие столбцы:Есть ли более быстрый способ выполнить следующий запрос SQL?
id, name, domain, added, is_verified
1, "First Google", "google.com", DATE(), 1
2, "Second Google", "google.com", DATE(), 1
3, "Third Google", "google.com", DATE(), 1
4, "First disney", "disney.com", DATE(), 1
5, "Second disney", "disney.com", DATE(), 1
6, "Third disney", "disney.com", DATE(), 0
7, "First example", "example.com", DATE(), 0
8, "Second example", "example.com", DATE(), 0
И следующий запрос:
SELECT domain FROM mytable WHERE domain NOT IN
(SELECT domain FROM mytable WHERE is_verified = 1 GROUP BY domain)
GROUP BY domain ORDER BY added DESC;
Основная идея этого запроса, чтобы получить все в domain
, что не имеет is_verified
по истине.
В приведенном выше примере это приведет только к возврату «example.com» один раз.
Запрос работает хорошо, но требуется время для выполнения (у меня есть тысячи записей). Есть ли другой способ сделать этот запрос более быстрым и эффективным?
вопросы эффективности должны включать EXPLAIN ANALYZE и некоторую информация о размере таблицы, индекс, текущее время производительность, время ожидания и т. д. Медленный - относительный термин, и нам нужна реальная ценность для сравнения. MySQL также читайте [How-to-Ask] (http://stackoverflow.com/help/how-to-ask) – e4c5
На мой взгляд, ваша таблица неправильно нормализована, так как несколько строк охватывают один единственный логический объект (в зависимости от домен). Кроме того, выполняется ли только последнее количество записей «добавлено» или проверено домен, если в каких-либо строках «is_verified = 1»? – Smutje