SQLite Like против Substr - PullRequest
       9

SQLite Like против Substr

1 голос
/ 26 августа 2011

Я хочу сравнить последние 4 символа текстового поля.

Производительность мудрая, я должен сделать:

select * from table where col like '%last';

OR

select * from table where substr(col,-4)='last';

Ответы [ 4 ]

2 голосов
/ 01 сентября 2011

Вы не сможете воспользоваться индексом при использовании подстановочного знака:

          LIKE '%.edu'

Альтернативой может быть сохранение обратной версии строки в другом столбце, индексирование этого столбца с обратным содержимым, а затем использование LIKE (или, лучше, функции GLOB [, потому что в нескольких реализациях SQLite LIKE () имеет был переопределен, что также препятствует использованию индексом ] передачи обращенной версии искомой строки. Например, если вы искали URL-адреса, заканчивающиеся на .edu, вы бы искали в обратном столбце значения, начинающиеся с с 'ude.'.

1 голос
/ 01 сентября 2011

Страница оптимизатора , раздел 4, объясняет, что оператор LIKE предназначен для оптимизации выражений вида col LIKE 'something that does not begin with a percent sign%'.

1 голос
/ 31 августа 2011

Я пытался использовать EXPLAIN перед запросами, чтобы увидеть операции виртуальной машины, и у оператора с функцией substr() было на 3 кода операции больше, чем у кода с LIKE. Это не значит, что это обязательно медленнее, но это признак того, что это может быть.

1 голос
/ 31 августа 2011

Я не знаю, какая из них имеет лучшую производительность, но первую лучше читать, и я не ожидаю каких-либо существенных различий в производительности.

...