powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / WHERE Field <> '' не использует индекс
20 сообщений из 20, страница 1 из 1
WHERE Field <> '' не использует индекс
    #39405973
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно получить все записи, с непустым полем orientir
Код: sql
1.
SELECT ORIENTIR FROM APART WHERE ORIENTIR <> ''


или
Код: sql
1.
SELECT ORIENTIR FROM APART WHERE ORIENTIR IS DISTINCT FROM NULL


или
Код: sql
1.
SELECT ORIENTIR FROM APART WHERE ORIENTIR IS NOT NULL



планPLAN (APART NATURAL)

Проблема в том, что вышеуказанные запросы не хотят использовать индекс.

скрипт таблицы:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE COLLATION NOCASE_COLL FOR WIN1251 FROM PXW_CYRL CASE INSENSITIVE;
...
...

CREATE TABLE APART (
    ORIENTIR STRING255 COLLATE NOCASE_COLL /* STRING255 = VARCHAR(255) */,

...
...
CREATE INDEX APART_IDX_ORIENTIR ON APART (ORIENTIR);



Но если использовать = вместо <>, то
план PLAN (APART INDEX (APART_IDX_ORIENTIR))


Добавлю. В таблице (в этом поле) были данные. Я не создавал нового поля. Я создал новый "COLLATION NOCASE_COLL", изменил COLLATION у таблицы, а затем создал индекс.
...
Рейтинг: 0 / 0
WHERE Field <> '' не использует индекс
    #39405977
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
char_length?
...
Рейтинг: 0 / 0
WHERE Field <> '' не использует индекс
    #39405980
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, пробовал, забыл написать:
Код: sql
1.
SELECT ORIENTIR FROM APART WHERE CHAR_LENGTH(ORIENTIR) > 0



тоже не использует индекс
...
Рейтинг: 0 / 0
WHERE Field <> '' не использует индекс
    #39405986
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

<> не может и не должно использовать индекс.
...
Рейтинг: 0 / 0
WHERE Field <> '' не использует индекс
    #39405987
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11да, пробовал, забыл написать:
Код: sql
1.
SELECT ORIENTIR FROM APART WHERE CHAR_LENGTH(ORIENTIR) > 0



тоже не использует индекс
Как вариант, обнулять пустые строки. is not null должен зацепить индекс.
...
Рейтинг: 0 / 0
WHERE Field <> '' не использует индекс
    #39405990
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladX11,

<> не может и не должно использовать индекс.

а можно как-то "обмануть" firebird 2.5?
...
Рейтинг: 0 / 0
WHERE Field <> '' не использует индекс
    #39405993
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11а можно как-то "обмануть" firebird 2.5?А зачем ? Почему ты решил, что индекс тут будет быстрее NATURAL'а ?
...
Рейтинг: 0 / 0
WHERE Field <> '' не использует индекс
    #39405999
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
очень долго выполняется - 15-40 секунд на некоторых ПК
на моём ПК 3-4 сек
...
Рейтинг: 0 / 0
WHERE Field <> '' не использует индекс
    #39406014
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

не вижу ответ на свой вопрос.
...
Рейтинг: 0 / 0
WHERE Field <> '' не использует индекс
    #39406093
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11Нужно получить все записи, с непустым полем orientir
Код: sql
1.
SELECT ORIENTIR FROM APART WHERE ORIENTIR <> ''



Проблема в том, что вышеуказанные запросы не хотят использовать индекс.


А если попробовать
Код: sql
1.
SELECT ORIENTIR FROM APART WHERE ORIENTIR > ''

:-)
...
Рейтинг: 0 / 0
WHERE Field <> '' не использует индекс
    #39406157
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зовите Пашу. Сколько можно уже? :о)
...
Рейтинг: 0 / 0
WHERE Field <> '' не использует индекс
    #39406186
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11 WHERE CHAR_LENGTH(ORIENTIR) > 0
не первый год замужем вроде, а не знаешь, что по вычисляемым столбцам индекс не используется.
если только не создать вычисляемый индекс по идентичному выражению.
...
Рейтинг: 0 / 0
WHERE Field <> '' не использует индекс
    #39406250
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
SELECT ORIENTIR FROM APART WHERE not (ORIENTIR = '')

?
...
Рейтинг: 0 / 0
WHERE Field <> '' не использует индекс
    #39406332
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladX11а можно как-то "обмануть" firebird 2.5?А зачем ? Почему ты решил, что индекс тут будет быстрее NATURAL'а ?

вероятно, у меня сложился такой стереотип, что с индексами всегда быстрее
...
Рейтинг: 0 / 0
WHERE Field <> '' не использует индекс
    #39406333
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PolesovА если попробовать
Код: sql
1.
SELECT ORIENTIR FROM APART WHERE ORIENTIR > ''



да, использует индекс!
...
Рейтинг: 0 / 0
WHERE Field <> '' не использует индекс
    #39406337
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мне нужно в тему "Как я ложанулся"
http://www.sql.ru/forum/1040818/topik-kak-ya-lazhanulsya

я забыл BeginUpdate/EndUpdate
...
Рейтинг: 0 / 0
WHERE Field <> '' не использует индекс
    #39406346
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11да, использует индекс!А смысл ?
...
Рейтинг: 0 / 0
WHERE Field <> '' не использует индекс
    #39406402
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, я понял, что в данном конкретном случае не имеет смысла.
...
Рейтинг: 0 / 0
WHERE Field <> '' не использует индекс
    #39407064
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А стоит ли создавать индекс на целочисленное поле, если в таблице до 100 записей и если в таблице 100-500 записей?

здесь http://www.ibase.ru/dontdoit/
пункт 10 гласит: Не создавайте ненужные индексы
осталось, определить, нужен ли тот или иной индекс или нет.
...
Рейтинг: 0 / 0
WHERE Field <> '' не использует индекс
    #39407074
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11А стоит ли создавать индекс на целочисленное поле, если в таблице до 100 записей и если в таблице 100-500 записей?

здесь http://www.ibase.ru/dontdoit/
пункт 10 гласит: Не создавайте ненужные индексы
осталось, определить, нужен ли тот или иной индекс или нет.
Как станет нужен - так поймёшь. Тогда и создашь.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / WHERE Field <> '' не использует индекс
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]