Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / WHERE Field <> '' не использует индекс / 20 сообщений из 20, страница 1 из 1
16.02.2017, 17:18
    #39405973
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WHERE Field <> '' не использует индекс
Нужно получить все записи, с непустым полем 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
16.02.2017, 17:21
    #39405977
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WHERE Field <> '' не использует индекс
char_length?
...
Рейтинг: 0 / 0
16.02.2017, 17:22
    #39405980
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WHERE Field <> '' не использует индекс
да, пробовал, забыл написать:
Код: sql
1.
SELECT ORIENTIR FROM APART WHERE CHAR_LENGTH(ORIENTIR) > 0



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

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



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

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

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

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



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


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

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

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

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



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

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

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

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


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