Удобный способ использовать LIKE чувствительность к регистру в sqlite - PullRequest
2 голосов
/ 18 ноября 2009

Как я вижу, оператор LIKE может оптимизировать запрос, если я переключу PRAGMA case_sensitive_like = ON. Я измерил, это действительно сработало, запросы «LIKE someth%» становятся в десять раз быстрее в сравнительно больших двоичных индексированных таблицах. Но проблема в том, что моя библиотека реализована как дополнение к моему приложению, она поддерживает свои собственные таблицы с любой БД, к которой она подключена. Итак, проблемы

  • Я не могу прочитать case_sensitive_like , поскольку он поддерживается только для установки, но не для чтения. Поэтому я не могу временно прочитать состояние и вернуть его после запроса
  • Как аддон, который должен подчиняться основным функциям БД, я не должен менять настройку в соответствии с моей потребностью в добре, поскольку она может повлиять на другие процедуры.
  • Как я вижу, нет внутреннего (с учетом регистра) внутреннего эквивалента, чтобы я мог напрямую вызывать оптимизизированный запрос. Например, используйте LIKECASESENSITIVE вместо LIKE
  • Я могу вызвать sqlite3_create_function, но я не знаю, могу ли я вызвать LIKE (CASE SENSITIVE) внутренне.

1 Ответ

6 голосов
/ 18 ноября 2009

Я не могу прочитать case_sensitive_like поскольку он поддерживается только для установки, не читать. Так что я не могу временно прочитайте состояние и верните его после запрос

Вы можете получить состояние case_sensitive_like с помощью такого запроса:

select case when 'a' like 'A' then 0 else 1 end

, который вернет 1, если case_sensitive_like = ON и 0, если это OFF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...