поэтому оба условия WHERE требуют сканирования таблицы. Это объясняет, почему мой тест был быстрым, даже когда дорогостоящее условие было указано первым в предложении WHERE. (Без доступных индексов оптимизатор запросов SQLite, по-видимому, считает оба условия одинаково дорогостоящими, поэтому он не беспокоится о порядке, в котором они оцениваются.)
ах данных SQL (я использую Python + Sqlite), как убедиться, что, если у нас есть 1 миллион строк, запрос
SELECT * FROM mytable WHERE myfunction(description) < 500 AND column2 < 1000
[-----------------------------] [--------------]
high-CPU cost condition easy-to-test
requiring 100 µs per test condition
оптимизирован так, что 1-е условие (процессор дорого)только проверено если легко проверить второе условие уже верно? (так как это логичноAND
ленивыйAND
?)
Пример:
если всегда проверяется 1-е условие, это потребует 1 миллион x 100 мкс = 100 секунд!
если сначала проверяется 2-е условие, то только 5000 элементов будут предварительно отфильтрованы (в моем случае использования), а затем применение 1-го условия будет очень быстрым.
Примечание:
column2 не нужен идентификатор, это может быть что-то еще
в моем случае использования,myfunction
включает в себя вычисление расстояния Левенштейна