powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Проблема с использованием индекса
35 сообщений из 35, показаны все 2 страниц
Проблема с использованием индекса
    #34375304
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.

Есть таблица DocLimits. Есть ASC индекс по полям LowLimit,HighLimit этой таблицы.

Делаю запрос:
Код: plaintext
select * from DocLimits L where L.LowLimit =  1000 
выбор идет по индексу

Делаю запросы:
Код: plaintext
select * from DocLimits L where L.LowLimit >=  1000 
и
Код: plaintext
select * from DocLimits L where L.LowLimit <=  1000 
выбор идет по индексу.

Делаю запрос:
Код: plaintext
select * from DocLimits L where L.LowLimit <=  1000  AND L.LowLimit >=  1000 
выбор идет полным перебором :(

Неужели в ASA 8.0 невозможно выбрать диапазон по индексу? :(
...
Рейтинг: 0 / 0
Проблема с использованием индекса
    #34375311
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может, это важно:

Version 9.0.3 (5444)
Platform: Windows2003
Connection type: TCPIP
...
Рейтинг: 0 / 0
Проблема с использованием индекса
    #34375346
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock wrote:

> select * from DocLimits L where L.LowLimit <= *1000* AND L.LowLimit >= *1000*
> выбор идет полным перебором :(

А теперь вдумайся в смысл этого запроса ;).

> Неужели в ASA 8.0 невозможно выбрать диапазон по индексу? :(

Можно.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Проблема с использованием индекса
    #34375356
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock wrote:

> Version 9.0.3 (5444)

Даже номер версии правильно переписать не смог .
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Проблема с использованием индекса
    #34375410
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim2000
YuRock wrote:

> Version 9.0.3 (5444)

Даже номер версии правильно переписать не смог .
Тормоз! Это номер версии PowerBuilder'а :) Хотя он здесь совершенно ни как не влияет. Сам запрос действительно должен выдать полную таблицу и индекс смысла не имеет.
...
Рейтинг: 0 / 0
Проблема с использованием индекса
    #34375453
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl wrote:

>>> Version 9.0.3 (5444)
>> Даже номер версии правильно переписать не смог .
> Тормоз! Это номер версии PowerBuilder'а :)

У PB 9.0.3 не может быть такого номера билда (9.0.2 GA - это 7509). А
вот ASA 8.0.3.5444 есть.

> Сам запрос действительно должен выдать полную таблицу и
> индекс смысла не имеет.

Угумс.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Проблема с использованием индекса
    #34375493
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl[quot Dim2000]
YuRock wrote:

> Version 9.0.3 (5444)

Даже номер версии правильно переписать не смог .


Версия, конечно же, 8.0.3

Тормоз! Это номер версии PowerBuilder'а :) Хотя он здесь совершенно ни как не влияет. Сам запрос действительно должен выдать полную таблицу и индекс смысла не имеет.

Спасибо, что обозвали.

Для умников. Запрос должен вернуть одну запись. Это я привел, как пример. Если Вам так будет понятнее:

Код: plaintext
select * from DocLimits L where L.LowLimit >=  1000  AND L.LowLimit <=  1002 

Столько ответов и столько в них смысла :\
...
Рейтинг: 0 / 0
Проблема с использованием индекса
    #34375520
Rubber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
чего на человека наехали ?
что значит вернётся вся таблица ?

запрос
select * from DocLimits L where L.LowLimit <= 1000 AND L.LowLimit >= 1000

идентичен
select * from DocLimits L where L.LowLimit = 1000

и индекс в первом варианте таки да подхватится врядли...
...
Рейтинг: 0 / 0
Проблема с использованием индекса
    #34375527
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock wrote:

> select * from DocLimits L where L.LowLimit >= *1000* AND L.LowLimit <= *1002*

Именно такой запрос будет выполняться с использованием индекса.

> Столько ответов и столько в них смысла :\

Какой вопрос, такие и ответы .
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Проблема с использованием индекса
    #34375528
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rubberзапрос
select * from DocLimits L where L.LowLimit <= 1000 AND L.LowLimit >= 1000

идентичен
select * from DocLimits L where L.LowLimit = 1000

и индекс в первом варианте таки да подхватится врядли...

Вот в том то и вопрос - почему и что делать? :)
...
Рейтинг: 0 / 0
Проблема с использованием индекса
    #34375533
Rubber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
что почему ?
почему они идентичны ?
...
Рейтинг: 0 / 0
Проблема с использованием индекса
    #34375536
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim2000
YuRock wrote:

> select * from DocLimits L where L.LowLimit >= *1000* AND L.LowLimit <= *1002*

Именно такой запрос будет выполняться с использованием индекса.

Нет, индекс не пользуется.
...
Рейтинг: 0 / 0
Проблема с использованием индекса
    #34375543
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rubberчто почему ?
почему они идентичны ?

Нет. Почему в 1-м варианте (с 2-мя условиями) индекс не пользуется.
...
Рейтинг: 0 / 0
Проблема с использованием индекса
    #34375560
Rubber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если тебя итересует разобраться - почему оптимизатор так отрабатывает - это одно, надо видеть сервер,
а если интересует решение (например - медленно отрабатывает и надо поправить), то попробуй так:

select * from DocLimits L where L.LowLimit >= 1000
union all
select * from DocLimits L where L.LowLimit <= 1002
...
Рейтинг: 0 / 0
Проблема с использованием индекса
    #34375563
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock wrote:

> Нет. Почему в 1-м варианте (с 2-мя условиями) индекс не пользуется.

Проблема не воспроизводится.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Проблема с использованием индекса
    #34375568
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rubberесли тебя итересует разобраться - почему оптимизатор так отрабатывает - это одно, надо видеть сервер,
а если интересует решение (например - медленно отрабатывает и надо поправить), то попробуй так:

select * from DocLimits L where L.LowLimit >= 1000
union all
select * from DocLimits L where L.LowLimit <= 1002

Спасибо. Вообще-то - вариант номер 2.
К сожалению, Ваш вариант вернет, как раз-то, всю таблицу :)
...
Рейтинг: 0 / 0
Проблема с использованием индекса
    #34375572
Rubber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
понятное дело - вместо твоих 1000 и 1002 могут быть твои параметры, главное чтоб соблюдался математический принцип (1000<1002)
:)
...
Рейтинг: 0 / 0
Проблема с использованием индекса
    #34375575
Rubber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да, ошибся...

select * from DocLimits L where L.LowLimit <= 1000
union all
select * from DocLimits L where L.LowLimit >= 1002
...
Рейтинг: 0 / 0
Проблема с использованием индекса
    #34375576
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim2000
YuRock wrote:

> Нет. Почему в 1-м варианте (с 2-мя условиями) индекс не пользуется.

Проблема не воспроизводится.

Плохо. У меня воспроизводится.
...
Рейтинг: 0 / 0
Проблема с использованием индекса
    #34375584
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rubberда, ошибся...

select * from DocLimits L where L.LowLimit <= 1000
union all
select * from DocLimits L where L.LowLimit >= 1002

Да нет. Мне надо, как раз, записи с LowLimit 1000, 1001 и 1002, т.е. в данном примере - 3 записи. А в Вашем новом варианте - будут все записи, кроме нужных трех. IN не предлагать - там могут быть многомиллионные диапазоны (параметры заранее неизвестны).
Спасибо.
...
Рейтинг: 0 / 0
Проблема с использованием индекса
    #34375590
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock wrote:

> Плохо. У меня воспроизводится.

Я не смогу заглянуть в твою БД.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Проблема с использованием индекса
    #34375595
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockв Вашем новом варианте - будут все записи, кроме нужных трех
Кроме одной. Сорри.
...
Рейтинг: 0 / 0
Проблема с использованием индекса
    #34375603
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim2000Я не смогу заглянуть в твою БД.

К сожалению, показать ее не смогу. Только постараюсь ответить на все вопросы о ней, если Вам интересно их задать.
...
Рейтинг: 0 / 0
Проблема с использованием индекса
    #34375628
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну что, больше идей нет?
...
Рейтинг: 0 / 0
Проблема с использованием индекса
    #34375639
Rubber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
молви ещё раз чего нужно видеть ?
условные 1000, 1001 и 1002 ?
...
Рейтинг: 0 / 0
Проблема с использованием индекса
    #34375645
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rubberмолви ещё раз чего нужно видеть ?
условные 1000, 1001 и 1002 ?
Ну да. в данном случае - да. Но нужен именно неизвестный диапазон (может и большой), поэтому IN не подходит, а BETWEEN тоже индекс не пользует - я проверил :(
...
Рейтинг: 0 / 0
Проблема с использованием индекса
    #34375669
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
а BETWEEN тоже индекс не пользует - я проверил :(
Селективность условия примерно какая? Если по-русски, то какой процент записей из таблицы должен отобраться? CREATE STATISTICS пробовал?
...
Рейтинг: 0 / 0
Проблема с использованием индекса
    #34375684
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр Гoлдун YuRock
а BETWEEN тоже индекс не пользует - я проверил :(
Селективность условия примерно какая? Если по-русски, то какой процент записей из таблицы должен отобраться? CREATE STATISTICS пробовал?

Процент может быть любым. Абсолютно.

На счет CREATE STATISTICS - можно поподробнее? Мне казалось, что статистику неуникального индекса (а он у меня такой) сервер ведет сам...
...
Рейтинг: 0 / 0
Проблема с использованием индекса
    #34375931
Rubber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
select *
from DocLimits
where LowLimit <= 1000 and HighLimit = 1000

цепляет индекс ?
...
Рейтинг: 0 / 0
Проблема с использованием индекса
    #34376720
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rubberselect *
from DocLimits where LowLimit <= 1000 and High Limit = 1000

цепляет индекс ?

Кхгм... :)
Ты наверное имел в виду
Код: plaintext
from DocLimits where LowLimit <=  1000  and LowLimit =  1000 

Да, такой цепляет.
И такой тоже цепляет:
Код: plaintext
from DocLimits where LowLimit <=  1000  and LowLimit <  2000 

Но как только условиях появляются противоположные знаки (">" и "<", не важно, есть ли "=") - сразу индекс не работает.

Пробовал писать так:
Код: plaintext
from DocLimits (Index I_DocLimits_HiLo) where LowLimit >=  1000  and LowLimit <=  1500 

Но оптимизатор игнорит это указание :(
...
Рейтинг: 0 / 0
Проблема с использованием индекса
    #34376845
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock wrote:

> Но оптимизатор игнорит это указание :(

Оптимизатор, как минимум, не глупее тебя.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Проблема с использованием индекса
    #34376870
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim2000Оптимизатор, как минимум, не глупее тебя.
Спасибо за очередной комплемент! У тебя работа такая - комплементы на форуме раздавать? Кроме них я других постов от тебя еще не видел. И даже не знаю, хочу ли видеть в будущем.
...
Рейтинг: 0 / 0
Проблема с использованием индекса
    #34376872
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock Александр Гoлдун
Селективность условия примерно какая? Если по-русски, то какой процент записей из таблицы должен отобраться? CREATE STATISTICS пробовал?

Процент может быть любым. Абсолютно.

Так может стоит внимательнее почитать в документации про принципы работы оптимайзера? Индекс берется только тогда, когда он действительно может быть использован эффективно. Эффективность индексного скана по сравнению с фулсканом даже при четверти отбираемых записей уже может быть сомнительной. BETWEEN нормально цепляет индексы там, где это нужно. Разумеется, бывают исключения, в том числе и банальние ошибки в оптимайзере, от которых никто не застрахован. Надо детально анализировать каждый случай. А по такому выхолощенному примеру никто ничего конкретного не подскажет. Только общие советы: смотри план запроса, анализируй, проверяй статистику и т.п. Если абсолютно уверен в том, что там должен использоваться индекс, тогда попробуй приложить более свежий EBF. Если не помогает и уверен, что это ошибка, делай воспроизводимый пример и выкладывай case.
YuRock
На счет CREATE STATISTICS - можно поподробнее? Мне казалось, что статистику неуникального индекса (а он у меня такой) сервер ведет сам...
В хелпах достаточно подробно. Иногда случаются перекосы в статистике, из-за чего оптимайзер некорректно оценивает ту самую селективность, о которой я спрашивал.
...
Рейтинг: 0 / 0
Проблема с использованием индекса
    #34376962
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр ГoлдунТак может стоит внимательнее почитать в документации про принципы работы оптимайзера? Индекс берется только тогда, когда он действительно может быть использован эффективно. Эффективность индексного скана по сравнению с фулсканом даже при четверти отбираемых записей уже может быть сомнительной.
Да какая ж четверть?
select * from DocLimits (Index I_DocLimits_HiLo) where LowLimit >= 1000 and LowLimit <= 1005
выбирает 5 записей. А всего в таблице - их 16 миллионов!

В хелпах достаточно подробно. Иногда случаются перекосы в статистике, из-за чего оптимайзер некорректно оценивает ту самую селективность, о которой я спрашивал.
Сделал только что CREATE STATISTICS DocLimits. Ничего не изменилось :(

Спасибо за советы.
...
Рейтинг: 0 / 0
Проблема с использованием индекса
    #34377162
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Да какая ж четверть?
select * from DocLimits (Index I_DocLimits_HiLo) where LowLimit >= 1000 and LowLimit <= 1005
выбирает 5 записей. А всего в таблице - их 16 миллионов!

Мы должны вытрясать эту информацию с тебя? Могу только процитировать слова коллеги:
Dim2000
Проблема не воспроизводится.

На аналогичных запросах прекрасно подхватывает индекс, когда нужно. Хотя бы метаданные привел бы и получаемый план запроса, а в идеале - вообще сделать так, чтоб другие могли воспроизвести ситуацию. Тогда можно ожидать реальной помощи. Если нет, то это гадание на кофейной гуще. Все возможные советы уже посоветовали. Копай.
...
Рейтинг: 0 / 0
35 сообщений из 35, показаны все 2 страниц
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Проблема с использованием индекса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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