Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Проблема с использованием индекса / 25 сообщений из 35, страница 1 из 2
06.03.2007, 17:19
    #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
06.03.2007, 17:22
    #34375311
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с использованием индекса
Может, это важно:

Version 9.0.3 (5444)
Platform: Windows2003
Connection type: TCPIP
...
Рейтинг: 0 / 0
06.03.2007, 17:30
    #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
06.03.2007, 17:33
    #34375356
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с использованием индекса
YuRock wrote:

> Version 9.0.3 (5444)

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

> Version 9.0.3 (5444)

Даже номер версии правильно переписать не смог .
Тормоз! Это номер версии PowerBuilder'а :) Хотя он здесь совершенно ни как не влияет. Сам запрос действительно должен выдать полную таблицу и индекс смысла не имеет.
...
Рейтинг: 0 / 0
06.03.2007, 17:57
    #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
06.03.2007, 18:08
    #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
06.03.2007, 18:14
    #34375520
Rubber
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с использованием индекса
чего на человека наехали ?
что значит вернётся вся таблица ?

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

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

и индекс в первом варианте таки да подхватится врядли...
...
Рейтинг: 0 / 0
06.03.2007, 18:16
    #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
06.03.2007, 18:16
    #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
06.03.2007, 18:17
    #34375533
Rubber
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с использованием индекса
что почему ?
почему они идентичны ?
...
Рейтинг: 0 / 0
06.03.2007, 18:17
    #34375536
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с использованием индекса
Dim2000
YuRock wrote:

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

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

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

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

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

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

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

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

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

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

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

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

Плохо. У меня воспроизводится.
...
Рейтинг: 0 / 0
06.03.2007, 18:31
    #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
06.03.2007, 18:32
    #34375590
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с использованием индекса
YuRock wrote:

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

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

К сожалению, показать ее не смогу. Только постараюсь ответить на все вопросы о ней, если Вам интересно их задать.
...
Рейтинг: 0 / 0
06.03.2007, 18:44
    #34375628
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с использованием индекса
Ну что, больше идей нет?
...
Рейтинг: 0 / 0
06.03.2007, 18:51
    #34375639
Rubber
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с использованием индекса
молви ещё раз чего нужно видеть ?
условные 1000, 1001 и 1002 ?
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Проблема с использованием индекса / 25 сообщений из 35, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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