Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Составные индексы с "разной" сортировкой
|
|||
|---|---|---|---|
|
#18+
Добрый день. Вопрос такой: есть ли смысл использовать указание направления сортировки в узлах индексов, если они (направления) - разные? Как они работают, я пока-что не заметил. Вот пример: Код: plaintext Так вот, использовать такую сортировку не получается. Запрос типа Код: plaintext Никто не сталкивался с подобной проблемой? Если эта фича не работает - посоветуете что-нибудь другое для решения этой проблемы? Сервер ASA 9.0.2 В таблице - 16 миллионов записей. Результаты запросов, как в примере - 2-4 записи. Данные в полях LowLimit и HighLimit не уникальные, но и сильно не повторяющиеся. min/мах значение этих полей: Код: plaintext 1. 2. 3. 4. 5. minlo,maxlo,minhi,maxhi 1048577,231735297,1048577,231740120 Код: plaintext 46283869 Спасибо большое за любые ответы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2007, 13:29 |
|
||
|
Составные индексы с "разной" сортировкой
|
|||
|---|---|---|---|
|
#18+
YuRock пишет: > Вопрос такой: есть ли смысл использовать указание направления сортировки > в узлах индексов, если они (направления) - разные? Как они работают, я > пока-что не заметил. Вот пример: Смысл это делать есть для поддержки определенных ORDER BY. Если у вас есть индекс, совпадающий с ORDER BY , то сервер может выполнять запрос без сортировки, двигаясь по индексу. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2007, 14:15 |
|
||
|
Составные индексы с "разной" сортировкой
|
|||
|---|---|---|---|
|
#18+
MasterZiv Смысл это делать есть для поддержки определенных ORDER BY. Если у вас есть индекс, совпадающий с ORDER BY , то сервер может выполнять запрос без сортировки, двигаясь по индексу. Posted via ActualForum NNTP Server 1.4 Да, действительно, спасибо. Если пишу так: Код: plaintext 1. 2. То идет по "правильному" плану Scan DocLimits using index i_DocLimits_HiLo (all rows) Но, что... Хоть в ORDER BY и можно, в фильтре - нельзя? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2007, 14:23 |
|
||
|
Составные индексы с "разной" сортировкой
|
|||
|---|---|---|---|
|
#18+
YuRockНо, что... Хоть в ORDER BY и можно, в фильтре - нельзя? А как вы себе представляете применение этого индекса сразу для проверки ваших двух условий? это было бы возможно, если бы индекс позволял сразу выбрать непрерывный диапазон, записи в котором удовлетворяют обоим условиям, но в вашем случае это совсем не так. Пусть у вас условие: a=<5 and b>=5 Индексированные по a asc, b desc данные выглядят так (удовлетворяющие условию данные выделены жирным): ab 3 7 3 6 32 4 6 4 5 4458 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2007, 16:24 |
|
||
|
Составные индексы с "разной" сортировкой
|
|||
|---|---|---|---|
|
#18+
A.K. YuRockНо, что... Хоть в ORDER BY и можно, в фильтре - нельзя? А как вы себе представляете применение этого индекса сразу для проверки ваших двух условий? это было бы возможно, если бы индекс позволял сразу выбрать непрерывный диапазон, записи в котором удовлетворяют обоим условиям, но в вашем случае это совсем не так. Пусть у вас условие: a=<5 and b>=5 Индексированные по a asc, b desc данные выглядят так (удовлетворяющие условию данные выделены жирным): Да, наверное Вы правы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2007, 16:28 |
|
||
|
Составные индексы с "разной" сортировкой
|
|||
|---|---|---|---|
|
#18+
YuRockДа, наверное Вы правы... Вот только как быть... :\ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2007, 16:28 |
|
||
|
Составные индексы с "разной" сортировкой
|
|||
|---|---|---|---|
|
#18+
а в чем проблема? вот вы говорите, что обоим условиям обычно удовлетворяет 2-4 записи. а каждому из условий по отдельности сколько удовлетворяет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2007, 16:39 |
|
||
|
Составные индексы с "разной" сортировкой
|
|||
|---|---|---|---|
|
#18+
A.K.а в чем проблема? вот вы говорите, что обоим условиям обычно удовлетворяет 2-4 записи. а каждому из условий по отдельности сколько удовлетворяет? В среднем - половина записей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2007, 17:41 |
|
||
|
Составные индексы с "разной" сортировкой
|
|||
|---|---|---|---|
|
#18+
Добрый день! Думаю в варианте автора манипулированием индексами и планами не обойтись. Данных много, да и условия выборки исключают нормальное использование индексов для достижения приемлимой скорости. Может подход в корне поменять? Перепроектировать базу немного? Какая бизнес-логика преследуется в выборке, что храниться в таблице и т.д.? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2007, 10:45 |
|
||
|
Составные индексы с "разной" сортировкой
|
|||
|---|---|---|---|
|
#18+
antandДобрый день! Думаю в варианте автора манипулированием индексами и планами не обойтись. Данных много, да и условия выборки исключают нормальное использование индексов для достижения приемлимой скорости. Может подход в корне поменять? Перепроектировать базу немного? Какая бизнес-логика преследуется в выборке, что храниться в таблице и т.д.? Эх, да если б я ее проектировал... Логика такая. LowLimit и HighLimit - это диапазон талонов. В каждом таком диапазоне - от 1 до 10 талонов примерно. Вот таких диапазонов - 16 млн. уже. Ну, единственный выход пока-что я вижу - чтоб не менять логику работы проекта (он огромный и мне не нравится в него лазить :) ) - это создать доп. таблицу, и в нее триггером на INSERT в DocLimits добавлять все строки диапазона и Id записи диапазона. Ну и единоразово в нее все загнать, а затем - этот триггер работать будет. Таким образом можно будет нормальным запросом получить все диапазоны, в которые входит талон. Правда, в этой таблице получится миллионов 100 записей :( Но пока на ум ничего больше не пришло... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2007, 12:19 |
|
||
|
Составные индексы с "разной" сортировкой
|
|||
|---|---|---|---|
|
#18+
Еще подробнее можно бизнес-логику? Начиная от описания талонов, диапазонов, их связь, как вставляются записи в таблицы, что нужно на выходе и т.д. Просто из вашего предыдущего поста не совсем понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2007, 16:35 |
|
||
|
Составные индексы с "разной" сортировкой
|
|||
|---|---|---|---|
|
#18+
antandЕще подробнее можно бизнес-логику? Начиная от описания талонов, диапазонов, их связь, как вставляются записи в таблицы, что нужно на выходе и т.д. На выходе нужно получить все диапазоны, в которые входит данный талон. Как добавляются данные в таблицу диапазонов - я не знаю (через документы как-то. Это сейчас не важно) Так вот, я предлагаю (сейчас это делаю и попробую поюзать) сделать таблицу, в которую будут попадать "развернутые" диапазоны. Т.е. Если в записи DocLimits такая запись: Id LowLimit HighLimit 12 1000 1003 то в DocLimitsEx будет так: Id DocLimitId TalonId 1 12 1000 2 12 1001 3 12 1002 4 12 1003 Вот. А в DocLimitsEx данные буду записывать триггерами на таблицу DocLimits. И все. В итоге необходимый список диапазонов талона можно будет получить очень просто. Другое дело, что, как я уже заметил эксперементально, кол-во записей в этой таблице получилось 55 миллионов... Многовато, однако... Но, думаю, так и оставлю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2007, 16:51 |
|
||
|
Составные индексы с "разной" сортировкой
|
|||
|---|---|---|---|
|
#18+
YuRockНа выходе нужно получить все диапазоны, в которые входит данный талон. Как добавляются данные в таблицу диапазонов - я не знаю (через документы как-то. Это сейчас не важно)Вот как раз это сейчас и важно. Трудоемкое решение задачи это первый признак плохой постановки задачи. Займись изучением бизнес-логики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2007, 17:04 |
|
||
|
Составные индексы с "разной" сортировкой
|
|||
|---|---|---|---|
|
#18+
Примерно ясно. Но раз у Вас нет таблицы талонов, то я бы сделал немного по другому. Ввел еще одну таблицу - талонов Talons. И связал бы ее с DocLimits через DocLimitsEx При вставке в DocLimits проверял, есть ли в Talons талон из вставляемого диапазона. Если нет добавлял бы запись в Talons. А потом фиксировал новую связь талонов и диапазонов в DocLimitsEx ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2007, 17:07 |
|
||
|
Составные индексы с "разной" сортировкой
|
|||
|---|---|---|---|
|
#18+
White Owl YuRockНа выходе нужно получить все диапазоны, в которые входит данный талон. Как добавляются данные в таблицу диапазонов - я не знаю (через документы как-то. Это сейчас не важно)Вот как раз это сейчас и важно. Трудоемкое решение задачи это первый признак плохой постановки задачи. Займись изучением бизнес-логики. Постановка этой задачи если и была, то лет 10 назад, когда я еще университет косил :) Это сейчас действительно не важно. Мне нужно строить запросы на основе готовых данных. Откуда взялись эти данные - какая уже разница? Если я потрачу несколько дней для того, чтобы в е. PowerBuilder'е найти место (местА), где делаются инсерты в первоначальную таблицу - мне это абсолютно не поможет. Через триггеры будет все-равно лучше, чем в момент добавления диапазона отдельно добавлять записи в новую таблицу, т.к. это просто глупо. Да и убрать диапазоны как таковые (упростить логику) - тоже не совсем оптимально - в DocLimits размер записи довольно большой... Да и боюсь я это делать, и лень :) В общем-то, я уже все сделал. Размер базы вырос на 25%, зато во многих местах начало летать. Если кто хочет еще что посоветовать - пожалуйста. Пока-что я склоняюсь к тому, чтобы закончить на этом... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2007, 17:15 |
|
||
|
Составные индексы с "разной" сортировкой
|
|||
|---|---|---|---|
|
#18+
YuRockДа и убрать диапазоны как таковые (упростить логику) - тоже не совсем оптимальноВот как раз это я и предполагал. Если некий талон всегда попадает в какой-то диапазон, иногда проще заниматься вычислением этого диапазона на лету, чем хранить его в базе... ну ладно. Есть еще один метод. Добавь в таблицу вычислимое поле примерно так: low_high char(20) compute(LowLimit || HighLimit) а потом сделай индекс на это вычислимое поле. И ищи данные по нему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2007, 17:20 |
|
||
|
Составные индексы с "разной" сортировкой
|
|||
|---|---|---|---|
|
#18+
antandПримерно ясно. Но раз у Вас нет таблицы талонов, то я бы сделал немного по другому. Ввел еще одну таблицу - талонов Talons. И связал бы ее с DocLimits через DocLimitsEx При вставке в DocLimits проверял, есть ли в Talons талон из вставляемого диапазона. Если нет добавлял бы запись в Talons. А потом фиксировал новую связь талонов и диапазонов в DocLimitsEx Да при чем тут Talons. Такая таблица, как раз, есть :) Но толку от нее, в ней же не указан список диапазонов, в которые входит данный талон. В ней вообще TalonId - это ПК. А новая в таблице - TalonId - не уникальное поле. А связывать DocLimitsEx теперь, естественно, можно с чем угодно будет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2007, 17:20 |
|
||
|
Составные индексы с "разной" сортировкой
|
|||
|---|---|---|---|
|
#18+
White OwlЕсть еще один метод. Добавь в таблицу вычислимое поле примерно так: low_high char(20) compute(LowLimit || HighLimit) а потом сделай индекс на это вычислимое поле. И ищи данные по нему. Интересно. Попробую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2007, 17:25 |
|
||
|
Составные индексы с "разной" сортировкой
|
|||
|---|---|---|---|
|
#18+
YuRock Да при чем тут Talons. Такая таблица, как раз, есть :) Так вот с этого и надо было начинать. В таком случае в DocLimitsEx можно оставить только DocLimitId и TalonId как первичный ключ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2007, 17:27 |
|
||
|
Составные индексы с "разной" сортировкой
|
|||
|---|---|---|---|
|
#18+
antand Так вот с этого и надо было начинать. В таком случае в DocLimitsEx можно оставить только DocLimitId и TalonId как первичный ключ Тю, ну можно, конечно. Ну а что изменится? (в данной задаче) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2007, 17:29 |
|
||
|
Составные индексы с "разной" сортировкой
|
|||
|---|---|---|---|
|
#18+
Да ничего, с точки зрения бизнес-локиги. Только база станет на 16 миллионов*(размер поля id ) поменьше. Примерно конечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2007, 17:31 |
|
||
|
Составные индексы с "разной" сортировкой
|
|||
|---|---|---|---|
|
#18+
antandДа ничего, с точки зрения бизнес-локиги. Только база станет на 16 миллионов*(размер поля id ) поменьше. Примерно конечно. Ну это немного. А вот если в будущем понадобиться это Id - будет уже интересней :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2007, 17:34 |
|
||
|
Составные индексы с "разной" сортировкой
|
|||
|---|---|---|---|
|
#18+
Вот в будущем как раз и можно добавить без проблем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2007, 17:37 |
|
||
|
Составные индексы с "разной" сортировкой
|
|||
|---|---|---|---|
|
#18+
Кстати без поля id в DocLimitsEx база будет не на 16 миллионов*(размер поля id ) поменьше, а на 16 миллионов*(размер поля id )*<среднее кол-во талонов в диапазоне>. Автор пишет: "В каждом таком диапазоне - от 1 до 10 талонов примерно". Пусть ~ 5 Итого 80 миллионов*(размер поля id ). Опять же примерно. И зачем спрашивается? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2007, 17:54 |
|
||
|
Составные индексы с "разной" сортировкой
|
|||
|---|---|---|---|
|
#18+
antandКстати без поля id в DocLimitsEx база будет не на 16 миллионов*(размер поля id ) поменьше, а на 16 миллионов*(размер поля id )*<среднее кол-во талонов в диапазоне>. Автор пишет: "В каждом таком диапазоне - от 1 до 10 талонов примерно". Пусть ~ 5 Итого 80 миллионов*(размер поля id ). Опять же примерно. И зачем спрашивается? Ну не жалко мне 300 метров :) А Id у записи должно быть всегда, я так думаю. Принципиально. Он в автообмене распределенки потом работать будет очень хорошо... Да и вообще - это неплохой стиль, когда у всех таблиц есть ПК... Ну, это мое мнение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2007, 17:58 |
|
||
|
|

start [/forum/topic.php?fid=55&msg=34406749&tid=2012190]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
73ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 215ms |
| total: | 385ms |

| 0 / 0 |
