За последние 24 часа нас посетили 36648 программистов и 1811 роботов. Сейчас ищут 783 программиста ...

механизм работы SQL или “невидимая работа” сервера

Тема в разделе "PHP для новичков", создана пользователем incomer, 6 окт 2009.

  1. incomer

    incomer Активный пользователь

    С нами с:
    25 апр 2009
    Сообщения:
    49
    Симпатии:
    0
    Адрес:
    я знаю !?
    вот запрос:
    Код (Text):
    1. SELECT  title
    2. FROM    sor, faq
    3. WHERE   sor.prod = faq.id
    4. AND     sor.tipy = 1
    Прошу помочь с ответами на интересующие меня вопросики:
    1) в запросе 2 условия, есть ли порядок выполнения SQL'ем этих условий?
    2) когда обработка запроса прошла, в каком виде и где храниться «виртуальная / рабочая» таблица?

    Спасибо.
     
  2. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    1. Нет.
    2. В памяти.

    Более детально
    1. Порядок наверняка есть, но он не имеет значения, поскольку вычисляется 1 конечный результат для записи.
    2. На вопрос в каком виде хранится :) тебе пожалуй надо почитать тех.документацию по MySQL. И посмотреть исходные коды сервера. Обычно это не нужно :)
     
  3. incomer

    incomer Активный пользователь

    С нами с:
    25 апр 2009
    Сообщения:
    49
    Симпатии:
    0
    Адрес:
    я знаю !?
    т.е. размер оперативной памяти влияет скорость?

    согласен, мне это не нужно ))
     
  4. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Да, поскольку память используется для хранения индексов, кеширования запросов и их результатов.
    Ну и в конечном итоге обращение к ОЗУ всегда быстрее чем работа с дисками.

    Поэтому на высоконагруженных системах под базы по возможности выделяют столько памяти чтобы туда поместилась вся база целиком с учетом индексов.
     
  5. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    В Mysql есть оптимизатор запросов, который сам определяет порядок. А жаль.
     
  6. incomer

    incomer Активный пользователь

    С нами с:
    25 апр 2009
    Сообщения:
    49
    Симпатии:
    0
    Адрес:
    я знаю !?
    благодарю Simpliest, ответ более чем исчерпывающий.
    Спасибо
     
  7. incomer

    incomer Активный пользователь

    С нами с:
    25 апр 2009
    Сообщения:
    49
    Симпатии:
    0
    Адрес:
    я знаю !?
    имеется в виду, что можно было бы ускорить выборку?
     
  8. admyx

    admyx Активный пользователь

    С нами с:
    14 мар 2008
    Сообщения:
    2.159
    Симпатии:
    1
    Kreker
    Мммм... Ну я думаю, что разработчики mysql далеко не глупые люди. И сделали свое детище оптимальным для мускуля.
    Хотя, с другой стороны... Наверное, есть какой-то "общий" алгоритм - на все случаи жизни. А для конкретных случаев, знающим людям, хотелось бы сконфигурировать под себя. Ты об этом?
     
  9. engager

    engager Активный пользователь

    С нами с:
    21 янв 2009
    Сообщения:
    1.106
    Симпатии:
    1
    Насчет мускуля пока не изучал вопрос, но в оракле и mssql можно дать оптимизатору директивы с порядком выполнения запросов. или просто вырубить оптимизатор. это иногда очень помогает.
     
  10. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Я о том, что вы сами знаете: универсальность всегда шла в ущерб оптимальности. Для того, чтобы определить, как выбирать данные, в каком порядке шуровать индексы, нужно сделать проверки и просчеты перед выборкой. Это ведь добавляет нагрузки и время выборке.
    Лично я, расставляя ключи, представляю, в каком порядке СУБД должна по ним ходить, поэтому для меня не проблема выставить в запросе аргументы по порядку. Конечно, я могу ошибаться, но для этого есть тесты, дебаг.
     
  11. В мускуле тоже. Курить FORCE INDEX, IGNORE INDEX и дальше по ссылкам. До ораклового конечно ему как до африки пешком, но...