У меня есть база данных с таблицей 'links' с 600 миллионами строк в SQLite.В базе данных есть 2 столбца - столбец src и столбец dest.В настоящее время индексов нет.
Между src и dest существует довольно много общих значений, но также имеется значительное количество дублированных строк.
Первое, что я пытаюсь сделатьудалить все повторяющиеся строки, а затем выполнить дополнительную обработку результатов, однако я столкнулся с некоторыми странными проблемами.
Во-первых, SELECT * FROM links WHERE src=434923 AND dest=5010182
.Теперь это возвращает довольно быстро один результат, а затем занимает довольно много времени для запуска, так как я предполагаю, что он выполняет табличное сканирование на оставшихся 600-метровых строках.
Однако, если я делаю SELECT DISTINCT * FROM links
, то он сразу же запускаетсявозвращать строки очень быстро.Вопрос в том, как это возможно?Конечно, для каждой строки эта строка должна сравниваться со всеми остальными строками в таблице, но для этого потребуется табличное сканирование оставшихся строк в таблице, которое СЛЕДУЕТ занимает годы!
Есть идеи, почему SELECT DISTINCT
намного быстрее, чем стандартный SELECT
?