вот запрос: Код (Text): SELECT title FROM sor, faq WHERE sor.prod = faq.id AND sor.tipy = 1 Прошу помочь с ответами на интересующие меня вопросики: 1) в запросе 2 условия, есть ли порядок выполнения SQL'ем этих условий? 2) когда обработка запроса прошла, в каком виде и где храниться «виртуальная / рабочая» таблица? Спасибо.
1. Нет. 2. В памяти. Более детально 1. Порядок наверняка есть, но он не имеет значения, поскольку вычисляется 1 конечный результат для записи. 2. На вопрос в каком виде хранится тебе пожалуй надо почитать тех.документацию по MySQL. И посмотреть исходные коды сервера. Обычно это не нужно
Да, поскольку память используется для хранения индексов, кеширования запросов и их результатов. Ну и в конечном итоге обращение к ОЗУ всегда быстрее чем работа с дисками. Поэтому на высоконагруженных системах под базы по возможности выделяют столько памяти чтобы туда поместилась вся база целиком с учетом индексов.
Kreker Мммм... Ну я думаю, что разработчики mysql далеко не глупые люди. И сделали свое детище оптимальным для мускуля. Хотя, с другой стороны... Наверное, есть какой-то "общий" алгоритм - на все случаи жизни. А для конкретных случаев, знающим людям, хотелось бы сконфигурировать под себя. Ты об этом?
Насчет мускуля пока не изучал вопрос, но в оракле и mssql можно дать оптимизатору директивы с порядком выполнения запросов. или просто вырубить оптимизатор. это иногда очень помогает.
Я о том, что вы сами знаете: универсальность всегда шла в ущерб оптимальности. Для того, чтобы определить, как выбирать данные, в каком порядке шуровать индексы, нужно сделать проверки и просчеты перед выборкой. Это ведь добавляет нагрузки и время выборке. Лично я, расставляя ключи, представляю, в каком порядке СУБД должна по ним ходить, поэтому для меня не проблема выставить в запросе аргументы по порядку. Конечно, я могу ошибаться, но для этого есть тесты, дебаг.
В мускуле тоже. Курить FORCE INDEX, IGNORE INDEX и дальше по ссылкам. До ораклового конечно ему как до африки пешком, но...