Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.14;
Скачать: CL | DM;

Вниз

Имеет ли значение в современных СУБД (в частности MySQL) порядок   Найти похожие ветки 

 
VictorT ©   (2005-07-07 18:06) [0]

перечисления таблиц в предложении from, а также порядок перечесления условий соединения и отбора в предолжении where?
Или сейчас это уже не имеет значения, т.к. оптимизатор сам решает, в каком порядке выполнять действия?


 
Polevi ©   (2005-07-07 18:09) [1]

если бы он еще всегда правильно решал


 
VictorT ©   (2005-07-07 18:12) [2]


> если бы он еще всегда правильно решал

И всё-таки, для него есть значение, как написан запрос?


 
rayrom ©   (2005-07-07 18:16) [3]

Порядок имеет значения от важного к мене важному если используются связи или от большего к меньшему (иеется в виду количество записей в таблицах), но сейчас это не совсем актуально, просто ты можеш проверить как работают твои запросы если менять местами таблицы в предложении from, и условия where.
Для етого есть специальная конструкция, вот выдержка из мана:
Синтаксис оператора EXPLAIN (получение информации о SELECT)
   EXPLAIN имя_таблицы
или EXPLAIN SELECT опции_выборки

EXPLAIN имя_таблицы является синонимом операторов DESCRIBE имя_таблицы и SHOW COLUMNS FROM имя_таблицы.

Если оператор SELECT предваряется ключевым словом EXPLAIN, MySQL сообщит о том, как будет производиться обработка SELECT, и предоставит информацию о порядке и методе связывания таблиц.

При помощи EXPLAIN можно выяснить, когда стоит снабдить таблицы индексами, чтобы получить более быструю выборку, использующую индексы для поиска записей.


 
VictorT ©   (2005-07-07 18:23) [4]


> от важного к мене важному

что такое "важный"?


 
VictorT ©   (2005-07-07 18:30) [5]

Были такие рекомендации:

О порядке именования таблиц в предложении FROM

В зависимости от способа считывания оптимизатором операторов SQL порядок, в котором таблицы перечислены в предложении FROM запроса, может оказывать определенное влияние на его выполнение. Например, наиболее выгодным может оказаться такой порядок именования таблиц, когда сначала перечислены таблицы меньшего размера, а затем большего. Многие опытные пользователи хорошо знают, что размещение в предложении FROM таблиц наибольшего размера последними приводит к более эффективному выполнению запроса.

О порядке задания условий соединения таблиц

Для соединения таблиц, имеющих один или несколько общих столбцов, часто используются так называемые основные таблицы. Основной мы называем главную таблицу запроса, с которой соединяется большинство или даже все другие таблицы. Обычно столбцы основной таблицы помещаются в предложении WHERE справа от операции соединения. Таблицы, соединяемые с основной таблицей, как и в случае предложения FROM, обычно указывают в порядке возрастания их размеров - от самой маленькой до самой большой.

При отсутствии в запросе основной таблицы все другие таблицы следует именовать в соответствии с их размерами - от наименьшего к наибольшему. При этом в предложении WHERE поля из таблиц наибольшего размера следует помещать справа от операций соединения, а условия соединения указывать прежде условий фильтрации.

Наиболее ограничивающее условие

Наиболее ограничивающие условия, как правило, оказывают существенное влияние на эффективность выполнения запросов SQL. Так что же это такое - наиболее ограничивающее условие? Наиболее ограничивающим называется такое условие предложения WHERE запроса, в соответствии с которым возвраща-ется наименьшее число строк данных. И наоборот, наименее ограничивающим является условие запроса, возвращающее наибольшее количество записей. В этой главе мы сосредоточим свое внимание на наиболее ограничивающих усло-виях только потому, что с их помощью отфильтровывается наибольшее коли-чество данных. При написании операторов SQL все ваши усилия должны быть направле-ны на то, чтобы оптимизатор первым оценивал именно наиболее ограничива-ющее условие, поскольку в этом случае возвращается подмножество данных наименьшего размера, что, в свою очередь, приводит к уменьшению непроиз-водительных затрат, связанных с выполнением запроса. Естественно, что дей-ственное размещение в запросе наиболее ограничивающего условия требует от вас понимания того, как работает оптимизатор. Наш практический опыт го-ворит о том, что во многих реализациях оценка оптимизатором предложения WHERE начинается с самого последнего условия. Следовательно, для того, что-бы оптимизатор мог начать свою работу именно с наиболее ограничивающего условия, вы должны поместить его в предложении WHERE последним.


Имеет ли смысл их сейчас ещё придерживаться?


 
rayrom ©   (2005-07-07 18:30) [6]

В связке главный - подчиненный, а по EXPLAIN почитай на www.mysql.ru, там есть дока на русском я тебе только часть кинул, там подробнее!


 
rayrom ©   (2005-07-07 18:34) [7]

Поэксперементируй через EXPLAIN, тогда точно узнаеш!


 
DiamondShark ©   (2005-07-07 19:40) [8]

А что, "Современные СУБД"(тм) оператор join уже не поддерживают?


 
VictorT ©   (2005-07-08 10:00) [9]


> DiamondShark ©   (07.07.05 19:40) [8][Ответить]

Как-то так сложилось, никогда не пользовался.
Т.е. вот это хорошая рекомендация?
При записи инструкций SELECT пользуйтесь оператором JOIN для создания обьединений, а не операторами сравнения в предложении WHERE. Это позволяет легко
определять, какие выражения задают правила объединения таблиц, а какие — ограничивают число записей в таблице результатов запроса.


 
Polevi ©   (2005-07-08 10:32) [10]

ты join на русский язык переведи


 
Danilka ©   (2005-07-08 10:40) [11]

в Орокле оператора join нет. :)


 
evvcom ©   (2005-07-08 10:45) [12]


> Т.е. вот это хорошая рекомендация?

Имхо, хорошая. Во всяком случае используя join тебе доступны следующие вариации: inner, left, right, full, cross. Может что-то в MySQL из этого и не реализовано, но в стандарте это есть. Тогда как в where эти вариации либо отсутствуют (наверное), либо ограничены.


 
rayrom ©   (2005-07-08 11:15) [13]


> Во всяком случае используя join тебе доступны следующие
> вариации: inner, left, right, full, cross. Может что-то
> в MySQL из этого и не реализовано

Смотря какая версия!


 
evvcom ©   (2005-07-08 14:30) [14]


> Смотря какая версия!

Эт-точно! (с) Сухов

По-моему это прописано в стандарте SQL-92, а то, что это не реализовано в некоторых версиях даже "самых уважаемых" серверов, конечно, не есть хорошо.


 
DiamondShark ©   (2005-07-08 15:32) [15]


> Т.е. вот это хорошая рекомендация?

Хорошая.


 
VictorT ©   (2005-07-08 16:59) [16]


> Смотря какая версия!

Глянул, как минимум несколько последних поддерживают.


 
Val ©   (2005-07-08 17:30) [17]

>[11] Danilka ©   (08.07.05 10:40)
в девятке уже завелся.



Страницы: 1 вся ветка

Текущий архив: 2005.08.14;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.036 c
14-1122232341
Начинающий админ
2005-07-24 23:12
2005.08.14
Вот поступило мне предложение...


14-1122017786
Жук
2005-07-22 11:36
2005.08.14
Разбиение винта


3-1120548686
DDDeN
2005-07-05 11:31
2005.08.14
Начало работы с InterBase


1-1122372361
serjufa
2005-07-26 14:06
2005.08.14
ак программно из D5 заставить на листе Excel отобразиться сетке


14-1121995071
SoftX
2005-07-22 05:17
2005.08.14
Какой коньяк лучше: французский, крымский или армянский?