Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Проблема с использованием индекса
|
|||
|---|---|---|---|
|
#18+
Добрый день. Есть таблица DocLimits. Есть ASC индекс по полям LowLimit,HighLimit этой таблицы. Делаю запрос: Код: plaintext Делаю запросы: Код: plaintext Код: plaintext Делаю запрос: Код: plaintext Неужели в ASA 8.0 невозможно выбрать диапазон по индексу? :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 17:19 |
|
||
|
Проблема с использованием индекса
|
|||
|---|---|---|---|
|
#18+
Может, это важно: Version 9.0.3 (5444) Platform: Windows2003 Connection type: TCPIP ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 17:22 |
|
||
|
Проблема с использованием индекса
|
|||
|---|---|---|---|
|
#18+
YuRock wrote: > select * from DocLimits L where L.LowLimit <= *1000* AND L.LowLimit >= *1000* > выбор идет полным перебором :( А теперь вдумайся в смысл этого запроса ;). > Неужели в ASA 8.0 невозможно выбрать диапазон по индексу? :( Можно. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 17:30 |
|
||
|
Проблема с использованием индекса
|
|||
|---|---|---|---|
|
#18+
YuRock wrote: > Version 9.0.3 (5444) Даже номер версии правильно переписать не смог . Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 17:33 |
|
||
|
Проблема с использованием индекса
|
|||
|---|---|---|---|
|
#18+
Dim2000 YuRock wrote: > Version 9.0.3 (5444) Даже номер версии правильно переписать не смог . Тормоз! Это номер версии PowerBuilder'а :) Хотя он здесь совершенно ни как не влияет. Сам запрос действительно должен выдать полную таблицу и индекс смысла не имеет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 17:49 |
|
||
|
Проблема с использованием индекса
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 17:57 |
|
||
|
Проблема с использованием индекса
|
|||
|---|---|---|---|
|
#18+
White Owl[quot Dim2000] YuRock wrote: > Version 9.0.3 (5444) Даже номер версии правильно переписать не смог . Версия, конечно же, 8.0.3 Тормоз! Это номер версии PowerBuilder'а :) Хотя он здесь совершенно ни как не влияет. Сам запрос действительно должен выдать полную таблицу и индекс смысла не имеет. Спасибо, что обозвали. Для умников. Запрос должен вернуть одну запись. Это я привел, как пример. Если Вам так будет понятнее: Код: plaintext Столько ответов и столько в них смысла :\ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 18:08 |
|
||
|
Проблема с использованием индекса
|
|||
|---|---|---|---|
|
#18+
чего на человека наехали ? что значит вернётся вся таблица ? запрос select * from DocLimits L where L.LowLimit <= 1000 AND L.LowLimit >= 1000 идентичен select * from DocLimits L where L.LowLimit = 1000 и индекс в первом варианте таки да подхватится врядли... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 18:14 |
|
||
|
Проблема с использованием индекса
|
|||
|---|---|---|---|
|
#18+
YuRock wrote: > select * from DocLimits L where L.LowLimit >= *1000* AND L.LowLimit <= *1002* Именно такой запрос будет выполняться с использованием индекса. > Столько ответов и столько в них смысла :\ Какой вопрос, такие и ответы . Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 18:16 |
|
||
|
Проблема с использованием индекса
|
|||
|---|---|---|---|
|
#18+
Rubberзапрос select * from DocLimits L where L.LowLimit <= 1000 AND L.LowLimit >= 1000 идентичен select * from DocLimits L where L.LowLimit = 1000 и индекс в первом варианте таки да подхватится врядли... Вот в том то и вопрос - почему и что делать? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 18:16 |
|
||
|
Проблема с использованием индекса
|
|||
|---|---|---|---|
|
#18+
что почему ? почему они идентичны ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 18:17 |
|
||
|
Проблема с использованием индекса
|
|||
|---|---|---|---|
|
#18+
Dim2000 YuRock wrote: > select * from DocLimits L where L.LowLimit >= *1000* AND L.LowLimit <= *1002* Именно такой запрос будет выполняться с использованием индекса. Нет, индекс не пользуется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 18:17 |
|
||
|
Проблема с использованием индекса
|
|||
|---|---|---|---|
|
#18+
Rubberчто почему ? почему они идентичны ? Нет. Почему в 1-м варианте (с 2-мя условиями) индекс не пользуется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 18:19 |
|
||
|
Проблема с использованием индекса
|
|||
|---|---|---|---|
|
#18+
если тебя итересует разобраться - почему оптимизатор так отрабатывает - это одно, надо видеть сервер, а если интересует решение (например - медленно отрабатывает и надо поправить), то попробуй так: select * from DocLimits L where L.LowLimit >= 1000 union all select * from DocLimits L where L.LowLimit <= 1002 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 18:23 |
|
||
|
Проблема с использованием индекса
|
|||
|---|---|---|---|
|
#18+
YuRock wrote: > Нет. Почему в 1-м варианте (с 2-мя условиями) индекс не пользуется. Проблема не воспроизводится. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 18:24 |
|
||
|
Проблема с использованием индекса
|
|||
|---|---|---|---|
|
#18+
Rubberесли тебя итересует разобраться - почему оптимизатор так отрабатывает - это одно, надо видеть сервер, а если интересует решение (например - медленно отрабатывает и надо поправить), то попробуй так: select * from DocLimits L where L.LowLimit >= 1000 union all select * from DocLimits L where L.LowLimit <= 1002 Спасибо. Вообще-то - вариант номер 2. К сожалению, Ваш вариант вернет, как раз-то, всю таблицу :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 18:25 |
|
||
|
Проблема с использованием индекса
|
|||
|---|---|---|---|
|
#18+
понятное дело - вместо твоих 1000 и 1002 могут быть твои параметры, главное чтоб соблюдался математический принцип (1000<1002) :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 18:26 |
|
||
|
Проблема с использованием индекса
|
|||
|---|---|---|---|
|
#18+
да, ошибся... select * from DocLimits L where L.LowLimit <= 1000 union all select * from DocLimits L where L.LowLimit >= 1002 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 18:27 |
|
||
|
Проблема с использованием индекса
|
|||
|---|---|---|---|
|
#18+
Dim2000 YuRock wrote: > Нет. Почему в 1-м варианте (с 2-мя условиями) индекс не пользуется. Проблема не воспроизводится. Плохо. У меня воспроизводится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 18:28 |
|
||
|
Проблема с использованием индекса
|
|||
|---|---|---|---|
|
#18+
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 не предлагать - там могут быть многомиллионные диапазоны (параметры заранее неизвестны). Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 18:31 |
|
||
|
Проблема с использованием индекса
|
|||
|---|---|---|---|
|
#18+
YuRock wrote: > Плохо. У меня воспроизводится. Я не смогу заглянуть в твою БД. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 18:32 |
|
||
|
Проблема с использованием индекса
|
|||
|---|---|---|---|
|
#18+
YuRockв Вашем новом варианте - будут все записи, кроме нужных трех Кроме одной. Сорри. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 18:33 |
|
||
|
Проблема с использованием индекса
|
|||
|---|---|---|---|
|
#18+
Dim2000Я не смогу заглянуть в твою БД. К сожалению, показать ее не смогу. Только постараюсь ответить на все вопросы о ней, если Вам интересно их задать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 18:36 |
|
||
|
Проблема с использованием индекса
|
|||
|---|---|---|---|
|
#18+
Ну что, больше идей нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 18:44 |
|
||
|
Проблема с использованием индекса
|
|||
|---|---|---|---|
|
#18+
молви ещё раз чего нужно видеть ? условные 1000, 1001 и 1002 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 18:51 |
|
||
|
Проблема с использованием индекса
|
|||
|---|---|---|---|
|
#18+
Rubberмолви ещё раз чего нужно видеть ? условные 1000, 1001 и 1002 ? Ну да. в данном случае - да. Но нужен именно неизвестный диапазон (может и большой), поэтому IN не подходит, а BETWEEN тоже индекс не пользует - я проверил :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 18:54 |
|
||
|
Проблема с использованием индекса
|
|||
|---|---|---|---|
|
#18+
YuRock а BETWEEN тоже индекс не пользует - я проверил :( Селективность условия примерно какая? Если по-русски, то какой процент записей из таблицы должен отобраться? CREATE STATISTICS пробовал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 19:01 |
|
||
|
Проблема с использованием индекса
|
|||
|---|---|---|---|
|
#18+
Александр Гoлдун YuRock а BETWEEN тоже индекс не пользует - я проверил :( Селективность условия примерно какая? Если по-русски, то какой процент записей из таблицы должен отобраться? CREATE STATISTICS пробовал? Процент может быть любым. Абсолютно. На счет CREATE STATISTICS - можно поподробнее? Мне казалось, что статистику неуникального индекса (а он у меня такой) сервер ведет сам... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 19:07 |
|
||
|
Проблема с использованием индекса
|
|||
|---|---|---|---|
|
#18+
select * from DocLimits where LowLimit <= 1000 and HighLimit = 1000 цепляет индекс ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 21:21 |
|
||
|
Проблема с использованием индекса
|
|||
|---|---|---|---|
|
#18+
Rubberselect * from DocLimits where LowLimit <= 1000 and High Limit = 1000 цепляет индекс ? Кхгм... :) Ты наверное имел в виду Код: plaintext Да, такой цепляет. И такой тоже цепляет: Код: plaintext Но как только условиях появляются противоположные знаки (">" и "<", не важно, есть ли "=") - сразу индекс не работает. Пробовал писать так: Код: plaintext Но оптимизатор игнорит это указание :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2007, 10:47 |
|
||
|
Проблема с использованием индекса
|
|||
|---|---|---|---|
|
#18+
YuRock wrote: > Но оптимизатор игнорит это указание :( Оптимизатор, как минимум, не глупее тебя. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2007, 11:25 |
|
||
|
Проблема с использованием индекса
|
|||
|---|---|---|---|
|
#18+
Dim2000Оптимизатор, как минимум, не глупее тебя. Спасибо за очередной комплемент! У тебя работа такая - комплементы на форуме раздавать? Кроме них я других постов от тебя еще не видел. И даже не знаю, хочу ли видеть в будущем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2007, 11:34 |
|
||
|
Проблема с использованием индекса
|
|||
|---|---|---|---|
|
#18+
YuRock Александр Гoлдун Селективность условия примерно какая? Если по-русски, то какой процент записей из таблицы должен отобраться? CREATE STATISTICS пробовал? Процент может быть любым. Абсолютно. Так может стоит внимательнее почитать в документации про принципы работы оптимайзера? Индекс берется только тогда, когда он действительно может быть использован эффективно. Эффективность индексного скана по сравнению с фулсканом даже при четверти отбираемых записей уже может быть сомнительной. BETWEEN нормально цепляет индексы там, где это нужно. Разумеется, бывают исключения, в том числе и банальние ошибки в оптимайзере, от которых никто не застрахован. Надо детально анализировать каждый случай. А по такому выхолощенному примеру никто ничего конкретного не подскажет. Только общие советы: смотри план запроса, анализируй, проверяй статистику и т.п. Если абсолютно уверен в том, что там должен использоваться индекс, тогда попробуй приложить более свежий EBF. Если не помогает и уверен, что это ошибка, делай воспроизводимый пример и выкладывай case. YuRock На счет CREATE STATISTICS - можно поподробнее? Мне казалось, что статистику неуникального индекса (а он у меня такой) сервер ведет сам... В хелпах достаточно подробно. Иногда случаются перекосы в статистике, из-за чего оптимайзер некорректно оценивает ту самую селективность, о которой я спрашивал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2007, 11:34 |
|
||
|
Проблема с использованием индекса
|
|||
|---|---|---|---|
|
#18+
Александр ГoлдунТак может стоит внимательнее почитать в документации про принципы работы оптимайзера? Индекс берется только тогда, когда он действительно может быть использован эффективно. Эффективность индексного скана по сравнению с фулсканом даже при четверти отбираемых записей уже может быть сомнительной. Да какая ж четверть? select * from DocLimits (Index I_DocLimits_HiLo) where LowLimit >= 1000 and LowLimit <= 1005 выбирает 5 записей. А всего в таблице - их 16 миллионов! В хелпах достаточно подробно. Иногда случаются перекосы в статистике, из-за чего оптимайзер некорректно оценивает ту самую селективность, о которой я спрашивал. Сделал только что CREATE STATISTICS DocLimits. Ничего не изменилось :( Спасибо за советы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2007, 11:55 |
|
||
|
Проблема с использованием индекса
|
|||
|---|---|---|---|
|
#18+
YuRock Да какая ж четверть? select * from DocLimits (Index I_DocLimits_HiLo) where LowLimit >= 1000 and LowLimit <= 1005 выбирает 5 записей. А всего в таблице - их 16 миллионов! Мы должны вытрясать эту информацию с тебя? Могу только процитировать слова коллеги: Dim2000 Проблема не воспроизводится. На аналогичных запросах прекрасно подхватывает индекс, когда нужно. Хотя бы метаданные привел бы и получаемый план запроса, а в идеале - вообще сделать так, чтоб другие могли воспроизвести ситуацию. Тогда можно ожидать реальной помощи. Если нет, то это гадание на кофейной гуще. Все возможные советы уже посоветовали. Копай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2007, 12:48 |
|
||
|
|

start [/forum/topic.php?all=1&fid=55&tid=2012212]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 219ms |
| total: | 343ms |

| 0 / 0 |
