xolnimda
@xolnimda

SELECT * vs SELECT COUNT(*) vs ... — что быстрее?

Перед вставкой в таблицу, нужно проверить на существование записи в ней по city_id.
2 000 000 записей в таблице, проверить и вставить нужно еще 10 000 000.
Что быстрее будет работать?

SELECT 1 FROM `sl_cities` WHERE `city_id` = 3995124 LIMIT 0, 1;


SELECT COUNT(*) FROM `sl_cities` WHERE `city_id` = 3995124;


или...?
  • Вопрос задан
  • 3210 просмотров
Пригласить эксперта
Ответы на вопрос 4
zeromodule
@zeromodule
PHP
А для чего проверить-то?
Если вы не хотите вставлять дубликаты записей, то повесьте уник и вставляйте с помощью INSERT IGNORE - это будет явно быстрее всяких там дополнительных селектов :)
Ответ написан
Комментировать
FanatPHP
@FanatPHP
Чебуратор тега РНР
Как всегда - дурацкий вопрос, да еще и по-дурацки сформулированный, порождает кучу дурацких ответов.

ЕСЛИ не читать тело вопроса, а отвечать на вопрос из заголовка (а это ключевой момент для Q&A сайта, поскольку тупые поисковики приводят именно по заголовкам. И администрация должна следить за релевантностью оных и вычищать вопросы, которые автор не в состоянии сформулировать), то ответ однозначный - за выборку ЗАПИСЕЙ только для того, чтобы ПОСЧИТАТЬ их, дают пожизненный эцих с гвоздями. Считать должна база!

ЕСЛИ отвечать на вопрос вне контекста вставки, а только глядя на запросы, то ответ - ОДИНАКОВО. В обоих случаях никакого подсчета нет а есть только выборка по ключу.

ЕСЛИ вникать в контекст задачи чуть глубже, то появляются варианты ускорить МНОЖЕСТВЕННУЮ проверку, такие как prepared statements (тот редкий случай, когда их фича с множественным исполнением может выстрелить).

ЕСЛИ вникать в задачу окончательно, то правильным будет ответ @zeromodule. Причем вставку надо либо делать множественную, по тысяче записей, либо заворачивать в транзакцию - поскольку ОБНОВЛЕНИЕ ИНДЕКСА при таком количестве вставок начнет тормозить работу куда сильнее, чем нищасные селекты, столь пугающие аффтара. И опять же использовпать prepared statements.
Ответ написан
Комментировать
opium
@opium
Просто люблю качественно работать
Никогда не понимал таких вопросов, проверить что быстрее можно 5 раз пока вы писали этот вопрос на тостере.
Ответ написан
WebSpider
@WebSpider
первый вариант
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы