|
|
|
Избыточность ради производительности
|
|||
|---|---|---|---|
|
#18+
Две таблицы - users (пользователи) и comments (их сообщения). В определенном месте нужно отобразить общее число комментов определенного юзера. Вариант а) users user_id user_name1 Vasya2 Serezha3 Misha comments comment_id user_id message theme_id1 1 "bla bla" 12 1 "atatata" 33 3 "wtf ololo" 1 Запрос: select u.user_name, (select count(*) from comments c where c.user_id=1) from users u where u.user_id=1 Вариант б) users user_id user_name comments_count1 Vasya 22 Serezha 03 Misha 1 comments comment_id user_id message theme_id1 1 "bla bla" 12 1 "atatata" 33 3 "wtf ololo" 1 Запрос: select u.user_name, u.comments_count from users u where u.user_id=1 Триггер: Код: sql 1. 2. 3. 4. 5. А теперь вопрос, на каком варианте остановится? какой вариант производительнее и так сказать "правильнее" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2012, 09:12 |
|
||
|
Избыточность ради производительности
|
|||
|---|---|---|---|
|
#18+
Зависит от многого. Сколько предполагается записей в каждой из таблиц? Какая будет СУБД? Каково соотношение запросов на вставку и на чтение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2012, 09:32 |
|
||
|
Избыточность ради производительности
|
|||
|---|---|---|---|
|
#18+
Дельфийский Оракул, преждевременная оптимизация - это зло. Запускайте макет №1 и пускай он себе работает. А вы наблюдайте за узкими местами. Если будет плохо - материализируйте count. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2012, 12:24 |
|
||
|
Избыточность ради производительности
|
|||
|---|---|---|---|
|
#18+
Дельфийский ОракулЗапрос: select u.user_name, (select count(*) from comments c where c.user_id=1) from users u where u.user_id=1 Я бы лучше так сделал этот запрос: Код: plsql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2012, 09:43 |
|
||
|
Избыточность ради производительности
|
|||
|---|---|---|---|
|
#18+
XDiaBLo, надо план смотреть. Так заведомо трудно сказать что лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2012, 12:19 |
|
||
|
Избыточность ради производительности
|
|||
|---|---|---|---|
|
#18+
maytonXDiaBLo, надо план смотреть. Так заведомо трудно сказать что лучше. Говорят что между селект и фром, лучше избегать подзапросов. Хотя иногда так удобнее и проще бывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2012, 13:02 |
|
||
|
Избыточность ради производительности
|
|||
|---|---|---|---|
|
#18+
XDiaBLomaytonXDiaBLo, надо план смотреть. Так заведомо трудно сказать что лучше. Говорят что между селект и фром, лучше избегать подзапросов. Хотя иногда так удобнее и проще бывает. Есть частные случай когда эффективно вынести кусок плана в inlineview или подзапрос. Но всё это как говорят "it depends". Судя по синтаксису у афтора Oracle (IMHO). Поэтому там нет RBO и надо смотреть статистику таблиц. А она иногда выкидывает фортели. Тоесть ты думаешь что индекс эффективен а оптимизатор решает что нет. ИЧСХ в 9 случаях из 10 оптимизатор выбирает вобщем-то приемлемый план. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2012, 13:15 |
|
||
|
Избыточность ради производительности
|
|||
|---|---|---|---|
|
#18+
maytonXDiaBLoпропущено... Говорят что между селект и фром, лучше избегать подзапросов. Хотя иногда так удобнее и проще бывает. Есть частные случай когда эффективно вынести кусок плана в inlineview или подзапрос. Но всё это как говорят "it depends". Судя по синтаксису у афтора Oracle (IMHO). Поэтому там нет RBO и надо смотреть статистику таблиц. А она иногда выкидывает фортели. Тоесть ты думаешь что индекс эффективен а оптимизатор решает что нет. ИЧСХ в 9 случаях из 10 оптимизатор выбирает вобщем-то приемлемый план. Да, бывало такое, что вроде всё логично и качественно, а Оракл в раздумьях, и план выполнения жуткий. Можно с помощью некоторых фокусов, заставить его забыть про ненужный индекс, и тогда он выберет правильный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2012, 13:26 |
|
||
|
Избыточность ради производительности
|
|||
|---|---|---|---|
|
#18+
Бывает такое что ты построил новый индекс в продакшен базе и десяток курсоров "перекосило". Хинтовать некогда. Не успеваешь да и захардкодено где-то в бинарях приложений а не в БД. Но если ты счастливый обладатель 11g то делаешь alter index <name> invisible и спокойно работаешь. А в своей сессии делаешь set optimizer_use_invisible_indexes=true и работаешь над оптимизацией потихоньку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2012, 13:35 |
|
||
|
Избыточность ради производительности
|
|||
|---|---|---|---|
|
#18+
maytonБывает такое что ты построил новый индекс в продакшен базе и десяток курсоров "перекосило". Хинтовать некогда. Не успеваешь да и захардкодено где-то в бинарях приложений а не в БД. Но если ты счастливый обладатель 11g то делаешь alter index <name> invisible и спокойно работаешь. А в своей сессии делаешь set optimizer_use_invisible_indexes=true и работаешь над оптимизацией потихоньку. Да, но у меня просто нет возможности вносить изменения в БД, поэтому я рассматриваю только оптимизацию запросов :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2012, 13:36 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=37884824&tid=1342188]: |
0ms |
get settings: |
9ms |
get forum list: |
21ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
164ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
| others: | 238ms |
| total: | 507ms |

| 0 / 0 |
