AlexPetrovich О, я люблю пошутить за это злюсь конечно на себя, но на этом вся ваша правота заканчивается. В ПМ могу скинуть ссылку на БД полностью в исходниках. По этому я смелюсь утверждать что знаю про что пишу не из теории...
Цитата: Да хоть 10. Это определяет разработчик в зависимости от решаемой задачи.
Как разработчику мне ни разу не понадобилось в течении 20-и лет эта возможность.
Цитата: Потому что сервер не должен "додумывать" за разработчика и заниматься "самодеятельностью".
То есть обязан лениться из принципа и быть далёким от реально возможной оптимизации.
Цитата: А с какого перепугу "пользователи" пишут SQL-запросы ??
Пользователей сервера можно назвать пользователями, пользователей моего по тоже можно назвать пользователями, тем не менее я пользователь сервера и не стесняюсь этого. У меня сейчас планирование собственного сервера и SQL как стандарт заранее не устраивает - тут подробнее.
OnWhere - выполняет фильтрацию. OnJoin - выполняет добавление полей в выборку. Насколько знаю - сильно не бейте, сначала выполняется приджойнивание (условия джойна) а потом условия where - это справедливо для того чтобы в условиях могли присутствовать поля из всех таблиц запроса. Однако.
Та база пока что не сервер. И я смотрю как реализован Selet. О чудо OnWhere выполняется до OnJoin. Я понимаю автора - в клиентской базе все данные все таблицы уже доступны в OnWhere и нет просто смысла выполнять Join данных до выполнения Join условий которые доступны в событии OnWhere... Выборка мастер детейла на двух таблицах с тремя миллионами делается в миллисекунду. Это происходит за счёт того что в первую очередь выбирается правильный индекс. То есть - берётся индекс который высчитан по условию либо больше либо меньше либо если равно то либо больше либо меньше реальный RecNo. И вся выборка первично идёт из локейта на первую позицию по условию потом чтение пока условие true.
!!! Так вот когда я могу вычленить это условие из запроса Я могу делать выборку за одну миллисекунду на трёхмиллионных таблицах и далее делать дополнительную фильтрацию дубляж джойнами и условиями конечной фильтрации. И даже больше если вы дадите запрос groupBy я его интелектуально как девелопер разберу и выполню на тех же данных что и FB сервер в сотню раз быстрее, потому что именно вычленю оптимальное условие.
Цитата: Вообще-то это стандарт, и практически всех устраивает. Слава Богу, что вы далеки от разработчиков этого стандарта...
Вы косо читали впереди я писал - сервер FB в посте выше был запрос делает 2 раза чтение в трёхмиллионных таблицах выбрав не те индексы. И он это делает когда я заранее знаю что он ничего не вернёт. Я пишу ПО далее отдаю в техподдержку которая его полгода мучает - отдает мне, после релиза мучается сама. Мои попытки реорганизовать в запросах план запроса не дали необходимых мне результатов, если вы внимательно читали что я пишу то понимаете почему - Join по 3 миллионам всегда идёт раньше чем первичное условие мастер-детайл.
ВЫВОД - Не кипятитесь теоретики, на уважаемых ресурсах. Я могу выложить все данные все ссылки все цыферки сравнения. Напишу инструкцию на русском как запустить и Вы никогда в жизни не добётесь этих же результатов на стандартном SQL (Перед тем, как писать всякую муть на уважаемых ресурсах, славо богу если научитесь так же уважать себя). Я про экономию электроэнергии. Почему на уважаемом ресурсе не уважают экономию энергии тупо простаивающих компов?
ps
Девелопер не бог, всего учесть не может даже за полгода - результат еле ворочающиеся программы и безполезный в этом случае SQL, который можно было бы оптимизировать в 100 раз, абсолютно уверен.
Добавлено:
И В ПЕРВУЮ ОЧЕРЕДЬ SQL не устраивает из того принципа что сервер не должен делать предположений.