Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
помогите оптимизировать запрос, пожалуйста
|
|||
|---|---|---|---|
|
#18+
pjatachokой, забыл в запросе написать GROUP BY l.link_id, T2.T2cgssn, T2.T2cdssn, T2.mtype, m.ni, m.opc, m.dpc;да, точно, ведь требуемая группировка не совпадает с T2. (в первом запросе нужная группировка совпадала с T1) pjatachokосталось почитать материал по составлению триггеровбудете поддерживать таблицы T1, T2 триггерами? скорость изменения данных конечно упадет. (вопрос(ы) по триггерам задавайте в новой теме:) pjatachokЗЫ думаю мне пора проставляться))) жаль не в москве живуничего, научно-технический прогресс научится таки когда-нибудь отправлять пиво на мыло :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2007, 16:39 |
|
||
|
помогите оптимизировать запрос, пожалуйста
|
|||
|---|---|---|---|
|
#18+
LeXa NalBat(вопрос(ы) по триггерам задавайте в новой теме:) я все же задам здесь, дабы там не описывать вновь таблицы T1 и T2 LeXa NalBat, может Вы знаете как обойти проблему: пытаюсь создать триггер для T2: create function updateT2() returns opaque as ' DECLARE T2record record; SCCPrecord record; begin SELECT cgssn, cdssn INTO SCCPrecord FROM sccp_addr WHERE new.sccp_addr_id = sccp_addr.sccp_addr_id; SELECT * INTO T2record FROM T2 WHERE T2time_id = new.time_id AND T2mtp_addr_id = new.mtp_addr_id AND T2link_addr_id = new.link_addr_id AND T2mtype = new.mtype AND T2cgssn = SCCPrecord.cgssn AND T2cdssn = SCCPrecord.cdssn if (not found) then INSERT INTO T2 (T2time_id, T2mtp_addr_id, T2link_addr_id, T2mtype, T2cgssn, T2cdssn, T2cnt) VALUES (new.time_id, new.mtp_addr_id, new.link_addr_id, new.mtype, SCCPrecord.cgssn, SCCPrecord.cdssn, new.count); else UPDATE T2 SET T2cnt = T2cnt + new.count WHERE T2time_id = new.time_id AND T2mtp_addr_id = new.mtp_addr_id AND T2link_addr_id = new.link_addr_id AND T2mtype = new.mtype AND T2cgssn = SCCPrecord.cgssn AND T2cdssn = SCCPrecord.cdssn end if; return NULL; end; ' language 'plpgsql'; create trigger updateT1 after insert on sccp_msg_stat for each row execute procedure UpdateT2(); но проблема в том что ERROR: INTO specified more than once CONTEXT: compile of PL/pgSQL function "updatet2" near line 19 можно ли как-то выбрать и сохранить значения cgssn, cdssn без применения INTO? или нужно как-то перестраивать триггер? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2007, 15:40 |
|
||
|
помогите оптимизировать запрос, пожалуйста
|
|||
|---|---|---|---|
|
#18+
pjatachok create function updateT2() returns opaque as ' DECLARE T2record record; SCCPrecord record; вы еще забыли тег . попробуйте применить его. если же серьезно, то скрипт желательно выжелять тегом [src] или (если хотите вставить свою подсветку) [FIX] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2007, 16:00 |
|
||
|
помогите оптимизировать запрос, пожалуйста
|
|||
|---|---|---|---|
|
#18+
4321 pjatachok create function updateT2() returns opaque as ' DECLARE T2record record; SCCPrecord record; вы еще забыли тег . попробуйте применить его. если же серьезно, то скрипт желательно выжелять тегом src или (если хотите вставить свою подсветку) FIX понял, выполнил: пытаюсь создать триггер для T2: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. но проблема в том что ERROR: INTO specified more than once CONTEXT: compile of PL/pgSQL function "updatet2" near line 19 можно ли как-то выбрать и сохранить значения cgssn, cdssn без применения INTO? или нужно как-то перестраивать триггер? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2007, 16:17 |
|
||
|
помогите оптимизировать запрос, пожалуйста
|
|||
|---|---|---|---|
|
#18+
"не вникая какой в том прок, что за том в руках и о чем глава" (с) pjatachok 4321 pjatachok create function updateT2() returns opaque as ' DECLARE T2record record; SCCPrecord record; вы еще забыли тег . попробуйте применить его. если же серьезно, то скрипт желательно выжелять тегом src или (если хотите вставить свою подсветку) FIX понял, выполнил: пытаюсь создать триггер для T2: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. но проблема в том что ERROR: INTO specified more than once CONTEXT: compile of PL/pgSQL function "updatet2" near line 19 можно ли как-то выбрать и сохранить значения cgssn, cdssn без применения INTO? или нужно как-то перестраивать триггер? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2007, 16:25 |
|
||
|
помогите оптимизировать запрос, пожалуйста
|
|||
|---|---|---|---|
|
#18+
"не вникая какой в том прок, что за том в руках и о чем глава" (с) pjatachok 4321 pjatachok create function updateT2() returns opaque as ' DECLARE T2record record; SCCPrecord record; вы еще забыли тег . попробуйте применить его. если же серьезно, то скрипт желательно выжелять тегом src или (если хотите вставить свою подсветку) FIX понял, выполнил: пытаюсь создать триггер для T2: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. но проблема в том что ERROR: INTO specified more than once CONTEXT: compile of PL/pgSQL function "updatet2" near line 19 можно ли как-то выбрать и сохранить значения cgssn, cdssn без применения INTO? или нужно как-то перестраивать триггер? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2007, 16:27 |
|
||
|
помогите оптимизировать запрос, пожалуйста
|
|||
|---|---|---|---|
|
#18+
ооооо!!!!! 4321 , дико извиняюсь, забыл в конце селекта поставить ; ))))))) вопрос исчерпан ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2007, 17:53 |
|
||
|
помогите оптимизировать запрос, пожалуйста
|
|||
|---|---|---|---|
|
#18+
LeXa NalBat, только что выяснилось что вместо запроса Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. будеьт стоять запрос Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. и в данном случае имея таблицу T2 ничего с s.cgpa LIKE '????????' AND s.cdpa LIKE '????????' похоже не сделать => таблица T2 в таком виде не годится(((( вместо '????????' будут стоять произвольные регулярные выражения....и что же делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2007, 18:34 |
|
||
|
помогите оптимизировать запрос, пожалуйста
|
|||
|---|---|---|---|
|
#18+
pjatachok Код: plaintext 1. 2. автор Код: plaintext 1. 2. 3. 4. если намного меньше, чем 560339, то можно добавить s.cgpa, s.cdpa в предварительную группировку при формировании таблицы T2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2007, 21:23 |
|
||
|
помогите оптимизировать запрос, пожалуйста
|
|||
|---|---|---|---|
|
#18+
AND s.cgssn=4 AND s.cdssn=6 AND s.cgpa LIKE '????????' AND s.cdpa LIKE '????????' - это опция, иногда это есть в запросе, иногда нет LeXa NalBat чему равно distinct s.cgssn, s.cdssn, s.cgpa, s.cdpa? Код: plaintext 1. 2. 3. 4. и кстати Код: plaintext 1. 2. 3. 4. других способов сокращения времени выборки нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2007, 11:24 |
|
||
|
помогите оптимизировать запрос, пожалуйста
|
|||
|---|---|---|---|
|
#18+
покажите explain analyze ... where ... s.cgpa LIKE '?1?' AND s.cdpa LIKE '?2?' ... какая избирательность (селктивность) по условию s.cgpa LIKE '?1?' AND s.cdpa LIKE '?2?'? то есть чему равно select count(*) from sccp_addr AS s where s.cgpa LIKE '?1?' AND s.cdpa LIKE '?2?'. параметры '?1?' и '?2?' сильно варьируемы, или например могут принимать несколько значений? они могут начинаться с '_' или '%'? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2007, 12:38 |
|
||
|
помогите оптимизировать запрос, пожалуйста
|
|||
|---|---|---|---|
|
#18+
LeXa NalBat, вместо любого знака вопроса в '???????' может быть любая цифра, то есть это будут значения вида '_23_45__' (например, где _ - любой символ-цифра (regexp в postgresql)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2007, 14:56 |
|
||
|
помогите оптимизировать запрос, пожалуйста
|
|||
|---|---|---|---|
|
#18+
pjatachokвместо любого знака вопроса в '???????' может быть любая цифра, то есть это будут значения вида '_23_45__' (например, где _ - любой символ-цифра (regexp в postgresql))я правильно понял? значения параметров в выражениях LIKE состоят из цифр и подчеркиваний, причем могут начинаться с подчеркивания? например: 1234567 12__34_ __1__2_ explain analyze и count(*) покажите? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2007, 14:43 |
|
||
|
помогите оптимизировать запрос, пожалуйста
|
|||
|---|---|---|---|
|
#18+
автор я правильно понял? значения параметров в выражениях LIKE состоят из цифр и подчеркиваний, причем могут начинаться с подчеркивания? LeXa NalBat , правильно EXPLAIN ANALYSE SELECT m.ni, m.opc, m.dpc, l.link_id, s.cgssn, s.cdssn, i.mtype, SUM(i.count) FROM sccp_msg_stat AS i, mtp_addr AS m, link_addr AS l, time_intervals_css7 AS t, sccp_addr AS s WHERE t.time_id = i.time_id AND m.mtp_addr_id = i.mtp_addr_id AND l.link_addr_id = i.link_addr_id AND i.sccp_addr_id = s.sccp_addr_id AND ( t.btime BETWEEN '2007-7-1 0:0:0' AND '2007-8-31 0:0:0' ) AND ( t.etime BETWEEN '2007-7-1 0:0:0' AND '2007-8-31 0:0:0' ) AND link_id IN ( 'SL521595368', 'SL336465782', 'SL1804289383', 'SL35005211' ) AND s.cgssn=6 AND s.cdssn=7 AND s.cgpa LIKE '7:99______' AND s.cdpa LIKE '1:79______' GROUP BY m.ni,m.opc,m.dpc, l.link_id, s.cgssn, s.cdssn, i.mtype; Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2007, 15:51 |
|
||
|
помогите оптимизировать запрос, пожалуйста
|
|||
|---|---|---|---|
|
#18+
создать индекс на таблицу sccp_msg_stat по полю sccp_addr_id ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2007, 16:07 |
|
||
|
помогите оптимизировать запрос, пожалуйста
|
|||
|---|---|---|---|
|
#18+
LeXa NalBatсоздать индекс на таблицу sccp_msg_stat по полю sccp_addr_id ну это понятно, просто раньше в самом начале пытались уйти от таблицы sccp_msg_stat (52мл записи а теперь опять к ней возвращаемся) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2007, 16:28 |
|
||
|
помогите оптимизировать запрос, пожалуйста
|
|||
|---|---|---|---|
|
#18+
pjatachok LeXa NalBatсоздать индекс на таблицу sccp_msg_stat по полю sccp_addr_idну это понятно, просто раньше в самом начале пытались уйти от таблицы sccp_msg_stat (52мл записи а теперь опять к ней возвращаемся)ТОТ запрос оптимизировали введением дополнительной таблицы. ЭТОТ - построением нужного индекса. имхо, эти два запроса, отличающиеся казалось бы только "опцей, иногда это есть в запросе, иногда нет", на самом деле являются принципально разными в смысле эффективных планов выполнения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2007, 16:38 |
|
||
|
помогите оптимизировать запрос, пожалуйста
|
|||
|---|---|---|---|
|
#18+
LeXa NalBat, ВАУ!!!!! выполняется после введения индекса за 800мс!!!!!!! ОГРОМНОЕ СПАСИБО ЕЩЕ РАЗ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2007, 17:03 |
|
||
|
помогите оптимизировать запрос, пожалуйста
|
|||
|---|---|---|---|
|
#18+
а, это из кеша результаты взяты после повторения запроса....так выполняется где-то за 45сек..все же не 300сек, уже лучше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2007, 17:14 |
|
||
|
помогите оптимизировать запрос, пожалуйста
|
|||
|---|---|---|---|
|
#18+
pjatachokа, это из кеша результаты взяты после повторения запроса....так выполняется где-то за 45сек..все же не 300сек, уже лучшепо плану NestedLoop( SeqScan(sccp_addr), IndexScan(sccp_msg_stat) ) должен выполняться около секунды. давайте explain analyze. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2007, 17:22 |
|
||
|
помогите оптимизировать запрос, пожалуйста
|
|||
|---|---|---|---|
|
#18+
LeXa NalBat pjatachokа, это из кеша результаты взяты после повторения запроса....так выполняется где-то за 45сек..все же не 300сек, уже лучшепо плану NestedLoop( SeqScan(sccp_addr), IndexScan(sccp_msg_stat) ) должен выполняться около секунды. давайте explain analyze. ситуация: выполнил несколько других запросов, в том числе "тяжелых", а потом EXPLAIN ANALYSE SELECT m.ni, m.opc, m.dpc, l.link_id, s.cgssn, s.cdssn, i.mtype, SUM(i.count) FROM sccp_msg_stat AS i, mtp_addr AS m, link_addr AS l, time_intervals_css7 AS t, sccp_addr AS s WHERE t.time_id = i.time_id AND m.mtp_addr_id = i.mtp_addr_id AND l.link_addr_id = i.link_addr_id AND i.sccp_addr_id = s.sccp_addr_id AND ( t.btime BETWEEN '2007-7-1 0:0:0' AND '2007-8-31 0:0:0' ) AND ( t.etime BETWEEN '2007-7-1 0:0:0' AND '2007-8-31 0:0:0' ) AND link_id IN ( 'SL521595368', 'SL336465782', 'SL1804289383', 'SL35005211' ) AND s.cgssn=6 AND s.cdssn=7 AND s.cgpa LIKE '_:99______' AND s.cdpa LIKE '1:79______' GROUP BY m.ni,m.opc,m.dpc, l.link_id, s.cgssn, s.cdssn, i.mtype; результат: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. тут же сразу повторяю тот же запрос EXPLAIN ANALYSE и результат: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. вот так "прыгает" время выполнения запроса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2007, 18:01 |
|
||
|
помогите оптимизировать запрос, пожалуйста
|
|||
|---|---|---|---|
|
#18+
да, кэширование налицо. но в этом запросе с s.cgpa LIKE '_:99______' прочесывается в пять раз больше строк (11278), чем в предыдущем с s.cgpa LIKE '7:99______' (197). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2007, 18:22 |
|
||
|
помогите оптимизировать запрос, пожалуйста
|
|||
|---|---|---|---|
|
#18+
LeXa NalBat, итак, я понимаю, больше ничего нельзя сделать с этим запросом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2007, 17:02 |
|
||
|
помогите оптимизировать запрос, пожалуйста
|
|||
|---|---|---|---|
|
#18+
попробовать "избыточную OLAP-like структуру" например: имеем таблицу t1 (f1 text) 12 13 23 надо ускорить запрос select count(*) from t1 where f1 like '_3'; поддерживаем триггерами таблицу t2 (f1 text, cnt integer) 12 1 _2 1 1_ 2 __ 3 13 1 _3 2 23 1 2_ 1 требуемый запрос эквивалентен быстрому select cnt from t2 where f1 = '_3' однако при изменении одной строки в t1 надо будет в триггере изменить 2^(length(f1)) строк в t2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2007, 17:31 |
|
||
|
помогите оптимизировать запрос, пожалуйста
|
|||
|---|---|---|---|
|
#18+
LeXa NalBat, большое спасибо за предложение))))много для себя узнал на будущее)) однако в данном случае такое решение врядли применимо, поскольку как вы заметили число строк в новой таблице будет степенной функцией от числа строк в оригинальной) а их весьма много ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2007, 19:40 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=34885785&tid=2004577]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
35ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
83ms |
get tp. blocked users: |
2ms |
| others: | 248ms |
| total: | 420ms |

| 0 / 0 |
