powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Избыточность ради производительности
10 сообщений из 10, страница 1 из 1
Избыточность ради производительности
    #37884814
Дельфийский Оракул
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Две таблицы - 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.
create trigger my_trigger
on comments
after insert
as
update users u set u.comments_count = u.comments_count + 1 where u.user_id = (select c.user_id from comments c where c.comment_id = --последняя вставленная строка-- (scope_identity(), last_insert_id() и т.д.))



А теперь вопрос, на каком варианте остановится? какой вариант производительнее и так сказать "правильнее" ?
...
Рейтинг: 0 / 0
Избыточность ради производительности
    #37884824
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зависит от многого. Сколько предполагается записей в каждой из таблиц? Какая будет СУБД? Каково соотношение запросов на вставку и на чтение?
...
Рейтинг: 0 / 0
Избыточность ради производительности
    #37885148
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дельфийский Оракул, преждевременная оптимизация - это зло. Запускайте
макет №1 и пускай он себе работает. А вы наблюдайте за узкими местами.
Если будет плохо - материализируйте count.
...
Рейтинг: 0 / 0
Избыточность ради производительности
    #37894798
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дельфийский ОракулЗапрос: 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.
select u.user_name, count(1)
  from users u 
  join comments c on u.user_id=c.user_id
where u.user_id=1
group by u.user_name
...
Рейтинг: 0 / 0
Избыточность ради производительности
    #37895109
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLo, надо план смотреть. Так заведомо трудно сказать что лучше.
...
Рейтинг: 0 / 0
Избыточность ради производительности
    #37895199
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonXDiaBLo, надо план смотреть. Так заведомо трудно сказать что лучше.
Говорят что между селект и фром, лучше избегать подзапросов. Хотя иногда так удобнее и проще бывает.
...
Рейтинг: 0 / 0
Избыточность ради производительности
    #37895228
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLomaytonXDiaBLo, надо план смотреть. Так заведомо трудно сказать что лучше.
Говорят что между селект и фром, лучше избегать подзапросов. Хотя иногда так удобнее и проще бывает.
Есть частные случай когда эффективно вынести кусок плана в inlineview
или подзапрос. Но всё это как говорят "it depends". Судя по синтаксису
у афтора Oracle (IMHO). Поэтому там нет RBO и надо смотреть статистику
таблиц. А она иногда выкидывает фортели. Тоесть ты думаешь что индекс эффективен
а оптимизатор решает что нет. ИЧСХ в 9 случаях из 10 оптимизатор выбирает
вобщем-то приемлемый план.
...
Рейтинг: 0 / 0
Избыточность ради производительности
    #37895251
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonXDiaBLoпропущено...

Говорят что между селект и фром, лучше избегать подзапросов. Хотя иногда так удобнее и проще бывает.
Есть частные случай когда эффективно вынести кусок плана в inlineview
или подзапрос. Но всё это как говорят "it depends". Судя по синтаксису
у афтора Oracle (IMHO). Поэтому там нет RBO и надо смотреть статистику
таблиц. А она иногда выкидывает фортели. Тоесть ты думаешь что индекс эффективен
а оптимизатор решает что нет. ИЧСХ в 9 случаях из 10 оптимизатор выбирает
вобщем-то приемлемый план.
Да, бывало такое, что вроде всё логично и качественно, а Оракл в раздумьях, и план выполнения жуткий. Можно с помощью некоторых фокусов, заставить его забыть про ненужный индекс, и тогда он выберет правильный.
...
Рейтинг: 0 / 0
Избыточность ради производительности
    #37895271
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бывает такое что ты построил новый индекс в продакшен базе и десяток
курсоров "перекосило". Хинтовать некогда. Не успеваешь да и захардкодено
где-то в бинарях приложений а не в БД. Но если ты счастливый обладатель
11g то делаешь alter index <name> invisible и спокойно работаешь. А в своей
сессии делаешь set optimizer_use_invisible_indexes=true и работаешь над
оптимизацией потихоньку.
...
Рейтинг: 0 / 0
Избыточность ради производительности
    #37895276
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonБывает такое что ты построил новый индекс в продакшен базе и десяток
курсоров "перекосило". Хинтовать некогда. Не успеваешь да и захардкодено
где-то в бинарях приложений а не в БД. Но если ты счастливый обладатель
11g то делаешь alter index <name> invisible и спокойно работаешь. А в своей
сессии делаешь set optimizer_use_invisible_indexes=true и работаешь над
оптимизацией потихоньку.
Да, но у меня просто нет возможности вносить изменения в БД, поэтому я рассматриваю только оптимизацию запросов :)
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Избыточность ради производительности
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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