У меня есть таблица с 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
Каков наилучший способ получить "самый быстрый" результат, используя соответствующую индексацию столбцов?
Самый быстрый способ - установить индекс на schema.table(row)
.
Затем вы можете выполнить:
SELECT true AS is_in_table
FROM schema.table
WHERE row = 'pattern'
LIMIT 1;
Для этой формулировки LIMIT
важен, если вы явно не объявили row
как уникальную (и даже тогда я не уверен на 100%, что MySQL будет помнить об этом для запроса).
COUNT(*)
должен будет искать каждое значение, которое может совпадать, прежде чем возвращать строку. Если столбец объявлен уникальным, то производительность должна быть одинаковой между двумя версиями.