|
Составной индекс с разнонаправленными составными частями - как сделать?
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6.
Запросы будут в основном такого вида: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Если сравнить с планом запроса Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
видно, и понятно почему, что отличие состоит в дополнительном SORT. Этой дополнительной безиндексной сортировки можно было бы избежать, если бы можно было постоить индекс (или первичный ключ) вида Код: sql 1.
Но как это сделать? Синтаксис SQL Firebird 3.0 такого не позволяет. Сразу пара оговорок: 1. Да, я понимаю, что можно сделать PRIMARY KEY (ID, DT) desc, и в данном случае на данном запросе это поможет. Но в реальности у таблицы есть и другие поля, которые надо добавить в индекс, и есть другие запросы, которым нужен именно прямой порядок сортировки по ID. Ну, например Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
2. Да, я читал про сравнение SORT и ORDER, знаю, что SORT может оказаться и эффективнее, но в данном случае SORT выглядит просто лишней. Вопрос скорее теоретический и вынесен в заголовок. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2019, 19:21 |
|
Составной индекс с разнонаправленными составными частями - как сделать?
|
|||
---|---|---|---|
#18+
shalamyansky, за такие первичные ключи надо руки отрывать. Составной ПК — зло. shalamyanskyСоставной индекс с разнонаправленными составными частями - как сделать? нет. Ищи другие решения ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2019, 19:27 |
|
Составной индекс с разнонаправленными составными частями - как сделать?
|
|||
---|---|---|---|
#18+
А в чем именно зло, можно подробнее? Пожалуйста. Первый вопрос закрыт, я понял. Но этот тоже очень интересен. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2019, 20:16 |
|
Составной индекс с разнонаправленными составными частями - как сделать?
|
|||
---|---|---|---|
#18+
shalamyansky, тем что он не удобен, вызывает геморрой на ровном месте. ПК должен быть искусственным и не привязан к полям, которые потенциально могут быть изменены. Есть конечно исключения, но редкие. Хочешь дополнительные ограничения, ну так есть ограничение уникальности, или уникальные индексы. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2019, 20:24 |
|
Составной индекс с разнонаправленными составными частями - как сделать?
|
|||
---|---|---|---|
#18+
Симонов Денис, Геморрой у кого, у прикладного программиста c SQL, или у разработчика сервера? Для себя лично не вижу геморроя. Я не понимаю, если у меня есть естественная уникальная связка ID+DT, зачем мне вводить искуственное поле artID=gen_id() только для того, чтобы строить на нем первичный ключ? И надо еще добавлять генератор, триггер etc. И будет и первичный ключ, и отдельный индекс по ID+DT, зачем? Если речь об удобстве, то это неудобно. Если речь об эффективности, то это другое дело, тут я совсем не понимаю. Вот и спрашиваю. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2019, 20:39 |
|
Составной индекс с разнонаправленными составными частями - как сделать?
|
|||
---|---|---|---|
#18+
Да, и делать update по данным полям, ни по отдельности, ни в связке, мне не нужно. Это именно что первичный идентификатор, раз введенный, далее неизменен. Возможно, в этом было бы зло. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2019, 20:47 |
|
Составной индекс с разнонаправленными составными частями - как сделать?
|
|||
---|---|---|---|
#18+
shalamyansky, id если уникальный вообще, так DT к нему совсем не надо. А значит, должен быть ПК по id, и еще можно построить desc индекс по DT. И будет счастье для where id = :... order by DT desc. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2019, 01:09 |
|
|
start [/forum/topic.php?fid=40&fpage=20&tid=1560565]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
48ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 17ms |
total: | 164ms |
0 / 0 |