|
|
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
Всем привет. Есть запрос вида: Код: sql 1. 2. 3. 4. 5. Запрос тупит т.к. sp_tree1 и sp_tree2 большие деревья. Решение, которое пока что приходит на ум это выборку по деревьям перекинуть во временные таблицы базы и затем выполнить запрос: Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 11:25 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012Решение, которое пока что приходит на ум это выборку по деревьям перекинуть во временные таблицы базы и затем выполнить запрос: Вместо решения обычно принято озвучивать задачу... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 11:28 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
Что посоветуете, чтобы с одной стороны избежать временных таблиц, а с другой повысить скорость выполнения запроса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 11:29 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012Что посоветуете, чтобы с одной стороны избежать временных таблиц, а с другой повысить скорость выполнения запроса? Посоветую показать DDL участвующих объектов, планы выполнения запросов (и в хп тоже) и статистику выполнения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 11:31 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012, для начала перепиши на нормальный ANSI JOIN ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 11:35 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
wadmanПосоветую показать DDL участвующих объектов, планы выполнения запросов (и в хп тоже) и статистику выполнения. Показать пока нет возможности, основная проблема в том, что sp_tree1 и sp_tree2 в первом варианте sql-запросы вызываются часто и соответственно они части внутри дергают таблицы tree1 и tree2, структура которых такая: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 11:41 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
Симонов Денисдля начала перепиши на нормальный ANSI JOIN в смысле так?: Код: sql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 11:44 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012, сколько записей в tree1, tree2? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 11:44 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
wadmanfedorov2012, сколько записей в tree1, tree2? в среднем около 4 тыс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 11:45 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012wadmanfedorov2012, сколько записей в tree1, tree2? в среднем около 4 тыс. Всего? И сколько мс запрос выполняется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 11:48 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
wadmanfedorov2012пропущено... в среднем около 4 тыс. Всего? И сколько мс запрос выполняется? несколько минут, просто в table1 несколько миллионов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 11:50 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
Если переписываю на временные таблицы, то работает все на порядки быстрее. Но не хотелось бы прибегать к временным таблицам вот и решил у форумчан спросить совета ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 11:51 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012Если переписываю на временные таблицы, то работает все на порядки быстрее. Но не хотелось бы прибегать к временным таблицам вот и решил у форумчан спросить совета Потому что планы строятся разные, потому и просил планы и статистику... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 11:53 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
wadmanПотому что планы строятся разные, потому и просил планы и статистику... Средствами одного sql-запроса (не переписываю sp_tree1 и sp_tree2) есть ли возможность увеличить скорость выполнения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 12:22 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012не хотелось бы прибегать к временным таблицам Альтернативой является перепроектирование базы. Ты готов на это пойти?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 12:23 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012wadmanПотому что планы строятся разные, потому и просил планы и статистику... Средствами одного sql-запроса (не переписываю sp_tree1 и sp_tree2) есть ли возможность увеличить скорость выполнения? Третий раз: для ответа на этот вопрос недостаточно информации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 12:24 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012Симонов Денисдля начала перепиши на нормальный ANSI JOIN в смысле так?: Код: sql 1. 2. 3. 4. нет, ключевое слово ON потерял. Мог бы и проверить сначала. Код: sql 1. 2. 3. 4. 5. 6. План запроса где? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 12:44 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
Симонов Денис Код: sql 1. 2. 3. 4. 5. 6. вот скажите мне FB сообразит и процедуры sp_tree1, sp_tree2 выполнятся по одному разу????? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 12:57 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovАльтернативой является перепроектирование базы. Ты готов на это пойти?.. Нет, а в чем суть перепроектирования бы заключалась - внедрять view? wadmanТретий раз: для ответа на этот вопрос недостаточно информации. Т.е.вы намекаете на то, что средствами одного sql-запроса (не переписываю sp_tree1 и sp_tree2) увеличить скорость не получиться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 13:00 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
m7mвот скажите мне FB сообразит и процедуры sp_tree1, sp_tree2 выполнятся по одному разу????? нет, конечно же ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 13:02 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
m7mвот скажите мне FB сообразит и процедуры sp_tree1, sp_tree2 выполнятся по одному разу?????Если в плане будет MERGE - да ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 13:02 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
Вот я на что намекаю... Или пусть программист к обсуждению подключится. wadmanfedorov2012Что посоветуете, чтобы с одной стороны избежать временных таблиц, а с другой повысить скорость выполнения запроса? Посоветую показать DDL участвующих объектов, планы выполнения запросов (и в хп тоже) и статистику выполнения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 13:02 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
Если добавить в дерево порядок обхода (и индексы на эти поля, понятно дело), то можно без хранимых процедур: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 13:06 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012Нет, а в чем суть перепроектирования бы заключалась - внедрять view? Изменение формата хранения деревьев, более тщательное выделение сущностей, нормализация. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 13:07 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
m7mСимонов Денис Код: sql 1. 2. 3. 4. 5. 6. вот скажите мне FB сообразит и процедуры sp_tree1, sp_tree2 выполнятся по одному разу????? зависит от плана запроса. Поэтому и спрашиваю. Хотя даже с MERGE здесь будет жопа. ибо fedorov2012просто в table1 несколько миллионов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 13:13 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
wadmanВот я на что намекаю Вот план, для запроса: Код: sql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 13:21 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
Точнее запрос такой: Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 13:23 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012, план не того запроса приводишь. Этот запрос наверняка быстро выполняется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 13:26 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
Симонов Денисfedorov2012, план не того запроса приводишь. Этот запрос наверняка быстро выполняется да, быстро - но он работает медленнее если написать так: Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 13:32 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012, приведи план вот этого запроса Код: sql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 13:34 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
Т.е. firebird не может никак выполнить один раз мой sp_tree1 и потом его использовать как таблицу при join'e Я показал пример на простых запроса (мой же гораздо сложнее) и применение ХП во from'e вместе с join'ом как не мудри с sql-запросом, но на больших данных выполняется медленнее и оптимизатор FB туповат чтобы догадаться что нужно, приходиться ему подсказывать и засовывать вручную результат ХП во временную таблицу и уже потом отдельным запросом в join'e с этой временной таблицей выполнять запрос ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 13:35 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
Симонов Денисfedorov2012, приведи план вот этого запроса нет возможности, мой вывод применения sp_tree постом выше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 13:36 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012, ты достал. Тебе говорят что может в определённых условиях. Где план? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 13:36 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012он работает медленнее если написать так: Врёшь. Приведённый запрос не может давать такой план: в нём нет места сортировке. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 13:39 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
Симонов ДенисТебе говорят что может в определённых условиях спокойствие, я понял что FB может,но видать в простых случаях - на более сложных запросах оптимизатор слабоват ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 13:40 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012оптимизатор FB туповат чтобы догадаться что нужно, приходиться ему подсказывать для оптимизатора процедура всегда "черный ящик", просто потому что там может быть условное ветвление, туча разных запросов, которые могут выполняться, а могут не выполняться, или вообще может не быть никаких запросов. http://www.ibase.ru/devinfo/dataaccesspaths.htm fedorov2012на более сложных запросах оптимизатор слабоват нужно критически относиться в первую очередь к себе, а не считать всех вокруг идиотами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 13:42 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovВрёшь. Нет - в ХП (sp_tree1) есть сортировка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 13:43 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012, ты не хочешь решения проблемы. Тебе говорят, что если будет план MERGE по обоим ХП, то обе они выполняться по 1 разу. Правда будут потери производительности на сортировке миллионов записей t1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 13:43 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
kdvнужно критически относиться в первую очередь к себе, а не считать всех вокруг идиотами. Ну согласитесь, предела совершенствованию оптимизатора СУБД нет пределов, никто не мешает понять что параметр parent_tree1 не меняется на всем протяжении запроса, а значит и смысл дергать sp_tree1 многократно нет. Идиотами никого не считаю, FB - вещь мощная, но оптимизатор мог быть и по умнее, я уверен в старших версиях разработчика внесут эти исправления ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 13:46 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
Симонов ДенисТебе говорят, что если будет план MERGE по обоим ХП, то обе они выполняться по 1 разу. Ответь да или нет - можно ли в самом sql-запросе поменять (местами или еще как-то), чтобы в плане был MERGE? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 13:49 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012, тройка вместо MERGE может использоваться HASH. Но я сомневаюсь, что это сильно поможет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 13:50 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012Т.е. firebird не может никак выполнить один раз мой sp_tree1 и потом его использовать как таблицу при join'e Я показал пример на простых запроса (мой же гораздо сложнее) и применение ХП во from'e вместе с join'ом как не мудри с sql-запросом, но на больших данных выполняется медленнее и оптимизатор FB туповат чтобы догадаться что нужно, приходиться ему подсказывать и засовывать вручную результат ХП во временную таблицу и уже потом отдельным запросом в join'e с этой временной таблицей выполнять запрос Попробуй как так Код: plsql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 13:52 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012, Код: sql 1. 2. 3. 4. 5. 6. Так по идее должен быть план MERGE. Но будет ли он быстрее сказать не могу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 13:52 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012Нет - в ХП (sp_tree1) есть сортировка В этом случае она отображалась бы в другом месте плана. А у тебя в плане она стоит крайней слева, что означает последнюю операцию после всех выборок. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 13:52 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012никто не мешает понять что параметр parent_tree1 не меняется на всем протяжении запроса, а значит и смысл дергать sp_tree1 многократно нет. Она и дёргается однократно, поэтому в плане TR1 NATURAL. Покажи статистику индекса FK_TABLE1 и результат SHOW DATABASE из isql. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 13:58 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012Ну согласитесь, предела совершенствованию оптимизатора СУБД нет пределов Есть. Причём весьма жёсткие. Если мой ХШ не врёт, ты пытаешься из таблицы выбрать записи, которые принадлежать одновременно двум заданным группам (или любой их подгруппе). В этом случае обломись, структура твоей БД совершенно не подходит для таких запросов. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 14:10 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
Сейчас я в качестве временной таблицы использую свою в базе, но в FB2.5 есть и свои - слышал лучше их использовать мол быстрее. В связи с чем вопрос - что нужно посмотреть для примера работы с этими таблица README.common_table_expressions.txt ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 14:20 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012, CTE к временным таблицам никаким боком не относится. А вот выкинуть твои рекурсивные процедуры и переписать на рекурсивные запросы возможно поможет. По времянкам README.global_temporary_tables ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 14:22 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012но в FB2.5 есть и свои - слышал лучше их использовать мол быстрее Интересный слух... Источник сомнению не подлежит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 14:24 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
GLOBAL TEMPORARY TABLE - судя по описанию эти так называемые временные таблицы также физически существуют в БД. Мне, казалось, что вызвал функцию FB передал нужные параметры и все. Похоже ближе COMMON TEMPORARY TABLE: Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 14:37 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
Симонов Денисвыкинуть твои рекурсивные процедуры и переписать на рекурсивные запросы возможно поможет. Если мой ХШ прав, то наверняка поможет денормализовать ключ дерева и выкинуть из запроса обращение к нему вообще. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 14:40 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
ХШ - это что? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 14:58 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012, ещё раз повторю CTE не имеет отношения к временным таблицам. Считай это вьюхой создаваемой на лету. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 14:59 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012ХШ - это что? Хрустальный Шар у особо продвинутых экстрасенсов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 15:16 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012COMMON TEMPORARY TABLE CTE = Common TABLE Expressions а временные таблицы - это Global Temporary Tables, GTT. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 15:16 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
kdvвременные таблицы - это Global Temporary Tables, GTT. Есть ли преимущество использование FBшных временных таблиц, перед собственной У меня такая где SESSION_ID - уникальное значение сессии (выполняемого sql-запроса) Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 15:23 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012, есть. Как минимум не надо ломать голову с SESSION_ID Почитай уже Firebird 2.1 Release Notes ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 15:37 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
Симонов Денисfedorov2012, есть. Как минимум не надо ломать голову с SESSION_ID А с т.зр. скорости работы - можно сказать, что использование временных таблиц FB предпочтительнее, потому что они быстрее работают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 15:40 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012, c GTT у тебя мусор так не будет копиться. Следовательно и проблемы производительности при его сборке пропадут. Но вообще это не панацея. Лучше уж оптимизировать алгоритм так чтобы не нужно было GTT задействовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 15:59 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
Симонов Денисfedorov2012, c GTT у тебя мусор так не будет копиться. Следовательно и проблемы производительности при его сборке пропадут. Правильно написал: Код: sql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 16:16 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012, нет. Может всё таки в синтаксис оператора создания таблиц уже заглянуть? Нету в FB возможности так делать Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 16:28 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
Симонов ДенисНету в FB возможности так делать Код: sql 1. В инструкции FB нет примера, большая просьба напишите как должно выглядеть в моем случае p.s. юзад здесь тоже ничего не дало http://www.forum.mista.ru/topic.php?id=582653 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 16:39 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012, в каком в "твоем случае"? И пример есть http://www.firebirdsql.org/refdocs/langrefupd21-ddl-table.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 16:42 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
kdvв каком в "твоем случае"? Я что-то запутался c CREATE GLOBAL TEMPORARY. Что-то подобное с помощью CREATE GLOBAL TEMPORARY можно сделать в одном sql-запросе или же CREATE GLOBAL TEMPORARY работает только в рамка скрипта и запускать его нужно в execute block : Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 19:22 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
GTT создаётся (как и обычная таблица) разово, а используется - по мере надобности. Данные в таблицы живут или до фиксации транзакции (по умолчанию) или до закрытия соединения (on commit preserve row). Таким образом, каждое подключение к БД может работать с индивидуальным набором данных в одноимённой временной таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 19:27 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
Получается FB физически а не виртуально создает TEMPORARY TABLE kdvИ пример есть http://www.firebirdsql.org/refdocs/langrefupd21-ddl-table.html Кстати в примере после отработки create global temporary table стоит commit. Вопрос - тогда как же будет удаляться temporary table вручную самому вызывать drop. Какой замудренный механизм, не ужели нельзя было сделать по принципу "execute block" для хранимой процедуры, который работает как обычный sql-запрос, а не скрипт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 19:29 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovТаким образом, каждое подключение к БД может работать с индивидуальным набором данных в одноимённой временной таблице. Ну тогда особой разницы между моим tmp_table нет, мне казалось, что у FB temporary table виртуальная. Кстати обычную таблицу, уже имеющуюся в БД, можно ли сконвертировать как-то в temporary table? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 19:32 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012Ну тогда особой разницы между моим tmp_table нет Есть: 1) Подумай как ты удаляешь из своих таблиц данные отпавших коннектов. 2) Как ты добьёшься от своих таблиц быть в ОЗУ, не сбрасываясь на диск без крайней необходимости. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 19:45 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovfedorov2012Ну тогда особой разницы между моим tmp_table нет Есть: 1) Подумай как ты удаляешь из своих таблиц данные отпавших коннектов. С этим все просто - использование tmp_table у меня идет для запросов на select и транзакцию я не commit, поэтому данные никогда физически в tmp_table не сохранятся fedorov20122) Как ты добьёшься от своих таблиц быть в ОЗУ, не сбрасываясь на диск без крайней необходимости. А разве данные будут сбрасываться на диск, если запрос делается в транзакции, которая в итоге не коммититься? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 19:51 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012С этим все просто - использование tmp_table у меня идет для запросов на select и транзакцию я не commit, поэтому данные никогда физически в tmp_table не сохранятся Ну так работай с временной таблицей чего противишся-то? fedorov2012А разве данные будут сбрасываться на диск, если запрос делается в транзакции, которая в итоге не коммититься? В общем случае да, в твоем частном случае иногда(а может и всегда) вполне возможно что и нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 20:02 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
Кстати обычную таблицу, уже имеющуюся в БД, можно ли сконвертировать как-то в temporary table? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 20:17 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012, нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 20:21 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
Симонов Денисfedorov2012, нет а можно TEMPORARY TABLE использовать как обычную таблицу т.е. вставлять/удалять туда значение коммитить их? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 20:22 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012, если GTT будет уровня транзакции то после коммита твои вставленные записи тютю, если уровня соединения, то останутся но ровно до тех пор, пока есть соединение. При дисконнекте он тоже тютю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 20:27 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
Симонов Денисfedorov2012, если GTT будет уровня транзакции то т.е. когда я делаю CREATE GLOBAL TEMPORARY TABLE я должен четко сказать какая у меня ON COMMIT {DELETE или PRESERVE} ROWS (delete т.е. после коммита транзакции данные удалятся)? можно ли использовать индексы и т.п. т.е. правильно ли я понимаю TEMPORARY TABLE от обычной TABLE в FB особо ничем не отличается (только тем, что описано ранее) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 20:33 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012, индексы можно. Есть нюансы с FK. Ну прочитай про них уже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 20:34 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
Симонов Денисfedorov2012, индексы можно. Есть нюансы с FK. Ну прочитай про них уже. Спасибо почитал, только вот не нахожу ответа на такой вопрос - у меня есть ХП в которых есть обращение к моей tmp_table. Сейчас я хочу удалить свою tmp_table и создать CREATE GLOBAL TEMPORARY TABLE с таким же именем, нужно ли перекомпилировать эти ХП или им без разницы какая tmp_table - GLOBAL TEMPORARY TABLE или обычная стандартная? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 21:51 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012Сейчас я хочу удалить свою tmp_table Попробуй и ответ придёт сам собой. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 22:12 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
ну да, drop'нуть не получиться пока ХП пустыми не сделаешь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2014, 22:24 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
Вообщем после многочасовой работы заставил sql-запрос летать без использования временных таблиц (в среднем 50 миллисекунд) . Но вот беда стоит включить сортировку (order by) как запрос начинает тормозить (конечно выполняется теперь быстрее чем раньше) и время составляет 48 сек. Что подскажите сделать? Может этот вопрос вынести в отдельный топик? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 02:32 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
48 сек выполнения - на выходе 40 тыс. записей с 20 полями ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 02:47 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012Ну тогда особой разницы между моим tmp_table нетРазница появится как только "моя tmp_table" потребуется нескольким клиентам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 04:28 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012 Что подскажите сделать? показать запросы и планы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 08:24 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
m7mпоказать запросы и планы запрос Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. План c order by: Код: sql 1. План без order by: PLAN JOIN (JOIN (TREE1 INDEX (PK_TREE1), SP_TREE1 NATURAL, TR1 INDEX (FK_TREE1_1)), TREE2 INDEX (PK_TREE2))(SP_TREE2 NATURAL)(MN INDEX (FK_TREE2))JOIN (T2 INDEX (FK_TABLE2_2), T1 INDEX (PK_TABLE1))(T3 INDEX (PK_TABLE3))[/SRC] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 11:21 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012, откуда тут уже 3 таблицы появилось, раньше была 1 и join с 2мя ХП. Только не говори, что это те временные таблицы, которые ты в процедурах заполнил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 11:27 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012, твои запросы ещё ни разу не соответствовали твоим планам, хватит врать уже... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 11:40 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
Симонов Денисfedorov2012, откуда тут уже 3 таблицы появилось, раньше была 1 и join с 2мя ХП. Только не говори, что это те временные таблицы, которые ты в процедурах заполнил. просто я старался не усложнять запрос и в топик вешал саму суть. Текущий запрос - это реальный мой запрос (только названия таблиц переименованы) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 11:47 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
Планы между собой отличаются только наличием или отсутствием SORT в начале Без order by выполняется запрос на порядки быстрее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 11:49 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
а нефиг сортировать широкие выборки. Попробуй Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. где id - PK таблицы t2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 12:00 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012Без order by выполняется запрос на порядки быстрееФетч первой записи - это ещё не выполнение запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 12:06 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
Симонов Денисгде id - PK таблицы t2 Спасибо Симонов Дениса нефиг сортировать широкие выборки. Попробуй А как быть, на клиенте корячиться с сортировкой - или на клиенте выделить в отдельную опцию - "Отсортировать", как правило в этом случае как поступают? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 12:13 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012, так помогло? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 12:16 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
Симонов Денисfedorov2012, так помогло? неа, да и как оно могло помочь если в with такой же order by стоит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 12:32 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012, не совсем. Там я сортирую более узкую выборку. Соответсвенно она требует меньше temp пространства, а потом присоединяю её к твоей табличке. В прочем Влад тебе правильно сказал. Ты без сортировки кнопочку Fetch All жмакни ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 12:36 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
Симонов Денисfedorov2012, не совсем. Там я сортирую более узкую выборку. Соответсвенно она требует меньше temp пространства, а потом присоединяю её к твоей табличке. может FB можно сказать мол сделай сортировку 1ым 100 записям ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 13:15 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012может FB можно сказать мол сделай сортировку 1ым 100 записям Сказать можно Код: sql 1. 2. 3. вот только эту первую сотню сначала надо четко определить дабы при следующем запуске она не оказалась совсем другой сотней ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 13:26 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
все равно не понятно почему order by медленно сортирует да еще и по индексированному полю - ведь матем. т. зр это быстрая операция ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 14:24 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012все равно не понятно почему *order by* медленно сортирует да еще и по индексированному полю Потому что: 1) Сортировка внешняя. 2) Индекс у таблицы, а сортируется конечный набор данных. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 14:49 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012все равно не понятно почему order by медленно сортирует да еще и по индексированному полю - ведь матем. т. зр это быстрая операция order by - не сортирует, он только говорит что результирующий набор должен быть отсортирован а каким образом это другое зы. возможно ты и сможешь добиться в плане запроса не SORT а ORDERED (или как его там) но это не значит что будет быстрее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 15:31 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
Всем спасибо, за оказанную помощь в решении моего вопроса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 16:04 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovfedorov2012все равно не понятно почему *order by* медленно сортирует да еще и по индексированному полю Потому что: 1) Сортировка внешняя. 2) Индекс у таблицы, а сортируется конечный набор данных. Firebird 2.5.3 - исправили ошибку с сортировкой на больших данных (прирост 30%). А вы говорите, все правильно, все хорошо - а оказывается ошибка ( http://tracker.firebirdsql.org/browse/CORE-4353]) + ко всему много других ошибок связанных с "order by" http://www.firebirdsql.org/file/documentation/release_notes/html/rlsnotes253.html#rnfb253-subrelease] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2014, 10:56 |
|
||
|
Избежать временных таблиц
|
|||
|---|---|---|---|
|
#18+
fedorov2012Dimitry Sibiryakovпропущено... Потому что: 1) Сортировка внешняя. 2) Индекс у таблицы, а сортируется конечный набор данных. Firebird 2.5.3 - исправили ошибку с сортировкой на больших данных (прирост 30%). А вы говорите, все правильно, все хорошо - а оказывается ошибка ( http://tracker.firebirdsql.org/browse/CORE-4353]) + ко всему много других ошибок связанных с "order by" http://www.firebirdsql.org/file/documentation/release_notes/html/rlsnotes253.html#rnfb253-subrelease] И у тебя теперь гораздо быстрее выполняется запрос???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 09:57 |
|
||
|
|

start [/forum/topic.php?all=1&fid=40&tid=1563247]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
190ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
92ms |
get tp. blocked users: |
1ms |
| others: | 241ms |
| total: | 559ms |

| 0 / 0 |
