Риторический вопрос про индексы
-
- Сообщения: 5
- Зарегистрирован: 04 мар 2006, 11:50
Риторический вопрос про индексы
Интересно почему нет upper index для varchar Char.
Было бы очень удобно для разработчика вместо создания дополнительного поля
для быстрого поиска по UpperCase создавать upper index
серверу то разницы ни какой, а людям удобно и размер экономит.
Было бы очень удобно для разработчика вместо создания дополнительного поля
для быстрого поиска по UpperCase создавать upper index
серверу то разницы ни какой, а людям удобно и размер экономит.
-
- Сообщения: 5
- Зарегистрирован: 04 мар 2006, 11:50
-
- Сообщения: 5
- Зарегистрирован: 04 мар 2006, 11:50
Хотя некоторые неприятности все таки в FB 2.0 есть
уже работает без индекса натуралом.
Все прочие варианты где в правой части что-то выполняется,
либо имеется параметр работают точно также(натуралом)
Код: Выделить всё
select Name
from Table
where upper(Name)=upper(:Name)
Все прочие варианты где в правой части что-то выполняется,
либо имеется параметр работают точно также(натуралом)

-
- Сообщения: 5
- Зарегистрирован: 04 мар 2006, 11:50
FB версия -2.0.0.12169 Firebird 2.0 Beta 2
таблица "Detail" 2 поля
для выборки
все нормально индекс используется
а если выбираем уже с вычислением то натуралом
таблица "Detail" 2 поля
- id integer
Name varchar(100)
Код: Выделить всё
CREATE INDEX "IDX_Detail_UName" ON "Detail" computed by (upper("Name");
Код: Выделить всё
SELECT
"Name"
FROM
"Detail"
where upper("Name") like 'IC%'
Код: Выделить всё
PLAN ("Detail" INDEX ("IDX_Detail_UName"))
Код: Выделить всё
SELECT
"Name"
FROM
"Detail"
where upper("Name") like upper('IC%')
казалось бы, причем тут индексы по выражениям
От вида индексов это никак не зависит, для обычных тоже самое. Потому что LIKE оптимизируется через индекс _только_ в случае шаблона-константы, у которого первые символы не шаблонные. Твой UPPER оптимизатор вычислять не собирается, поэтому поступает как для параметра - идет натуралом. Это абсолютно ожидаемо.

-
- Сообщения: 5
- Зарегистрирован: 04 мар 2006, 11:50