![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Оптимизация SQL запроса
DiggerAbstract © (2002-04-03 10:55:00)предлагаю небольшое обсуждение: некоторые правила которые вы применяете для оптимизации SQL запросов!
Nikolay M. (2002-04-03 19:03:00) [1]http://valdis.narod.ru/sql/les17.htm#op_setup
- здесь написано много об "общем", но не соглашусь, что все пункты верны для разных СУБД. Все зависит от оптимизатора запросов и если идет требуется оптимизация на уровне построения запросов, то, наверное, есть смысл воспользоваться анализатором запросов (если таковой есть. В MySQL, к примеру, можно посмотреть какие индексы будут использоваться и т.д.) и ставить эксперименты.
Alexandr (2002-04-03 13:56:00) [2]ага денормализация
wicked (2002-04-03 13:55:00) [3]по теме
для mssql характерно, что предложения с existsвыполняются иногда в десятки раз быстрее, чем предложения с in... правда, с соответствующей перестройкой запроса... ;)
а вообще, насколько я понял, в оптимизации скорости запросов сами запросы играют не очень большую роль... многое зависит как от сервера БД, так и от его настроек, и от организации ("нормальности") данных... плюс еще и правильное, сбалансированное индексирование...
Delirium (2002-04-03 12:45:00) [4]Ну в общем-то различные концепции оптимизации по своей сути едины : выигрываем в скорости - проигрываем в объёме и на оборот. Так при активном использовании временных таблиц (и временных идексов) можно получать результат отличный по скорости исполнения в десятки раз от классического подхода (единый select со множеством join-ов и вложенных запросов). И при этом использовать во много раз больше памяти и дискового пространства сервера. Так что обсуждать тут особо нечего, у каждого сервера БД подходы и методы свои, IMHO.
Reindeer Moss Eater (2002-04-03 12:26:00) [5]Дорогой план не обязательно означает долгое выполнение запроса
Sergey13 (2002-04-03 11:54:00) [6]Я стараюсь писать сложные запросы постепенно, т.е. цеплять каждую таблицу отдельно, и после каждого "прицепа" смотреть план выполнения. Обычно помогает.
Alexandr (2002-04-03 11:40:00) [7]наверное, нету общих концепций оптимизации SQL запросов.
DiggerAbstract (2002-04-03 11:30:00) [8]повторю еще разок - "общие концепции построения запроса не привязаваются к к.-л. серверу".
Johnmen (2002-04-03 11:23:00) [9]> select *
> from (select * from table1 where pole2=...) t1
> join table2 t2 on t1.pole1=t2.pole1
Зависит от сервера - тебе же уже сказали...
DiggerAbstract (2002-04-03 11:16:00) [10]ну скажем так - общие концепции построения запроса не привязаваются к к.-л. серверу.
например такое как: не применят вложенные селекты в области перечисления полей(очень сильно тормозит процесс) или например:
select *
from table1 t1
join table2 t2 on t1.pole1=t2.pole1
where t1.pole2=...
и др.
select *
from (select * from table1 where pole2=...) t1
join table2 t2 on t1.pole1=t2.pole1
второй запрос будет работать быстрее, т. к. мы обрубаем выборку раньше.
и т. п. вещи
Alexandr (2002-04-03 11:06:00) [11]а нафиг это тебе.
На эту тему книги писать можно, при том что для каждого сервера свою.
Это целое искусство
DiggerAbstract (2002-04-03 11:00:00) [12]можешь указать тип сервера
Alexandr (2002-04-03 10:59:00) [13]зависит от сервера