В Pervasive v13 , существует ли «более производительный» способ выполнения нечувствительного к регистру подобного выражения , чем показано ниже?
select * from table_name
where upper(field_name) like '%TEST%'
Приведенная выше функция UPPER имеет затраты на производительность, которых я бы хотел избежать.
Я не согласен с теми, кто говорит, что производительность UPPER незначительна;оно удваивает время выполнения по сравнению с точно таким же запросом без UPPER.
Справочная информация:
Я был очень доволен временем выполнения этого подстановочного выраженияпока я не понял, что в наборе результатов отсутствуют записи из-за несовпадения заглавных букв.
Затем я применил метод UPPER (см. выше).Это было достигнуто, включая пропущенные записи, но удвоило время выполнения моего запроса.
Этот метод UPPER для сравнения без учета регистра кажется мне невероятно интенсивным даже на концептуальном уровне.Вместо того, чтобы менять регистр поля, для каждой записи в большой таблице базы данных я надеюсь, что стандарт SQL предоставляет некоторый тип синтаксического флага, который изменяет поведение подобного выражения в отношении чувствительности к регистру.
Оттуда, за кулисами, механизм базы данных может генерировать скомпилированное регулярное выражение (или какой-либо другой оптимизированный без учета регистра) оценщик, который может значительно превзойти этот метод UPPER.Это похоже на возможность, которая может существовать.
Однако, я должен признать, что на каком-то уровне все еще должно быть преобразование для сравнения букв.И, возможно, этот метод UPPER ничем не хуже любого другого метода, который мог бы достичь того же набора результатов.
Несмотря на это, я отправляю этот вопрос в надежде, что кто-то обнаружит более производительный синтаксис, о котором я не знаю.