Разница между SELECT COUNT (*) и SELECT true при поиске конкретной строки в таблице миллиардов строк

0

У меня есть таблица с 3-5 миллиардами строк. Мне нужно проверить, находится ли конкретное значение в этой таблице, что является самым быстрым способом?

SELECT COUNT(*) AS total FROM schema.table WHERE row = 'pattern';   -- Must return 1 or 0

против

SELECT true AS is_in_table FROM schema.table WHERE row = 'pattern'   -- Must return true or no one row at all

Каков наилучший способ получить "самый быстрый" результат, используя соответствующую индексацию столбцов?

Теги:

1 ответ

3
Лучший ответ

Самый быстрый способ - установить индекс на schema.table(row).

Затем вы можете выполнить:

SELECT true AS is_in_table
FROM schema.table
WHERE row = 'pattern' 
LIMIT 1;

Для этой формулировки LIMIT важен, если вы явно не объявили row как уникальную (и даже тогда я не уверен на 100%, что MySQL будет помнить об этом для запроса).

COUNT(*) должен будет искать каждое значение, которое может совпадать, прежде чем возвращать строку. Если столбец объявлен уникальным, то производительность должна быть одинаковой между двумя версиями.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню