Подтвердить что ты не робот

Как работает SQL-запрос?

Как работает SQL-запрос? Как он скомпилирован? Является ли предложение from скомпилировано первым, чтобы увидеть, существует ли таблица? Как он действительно извлекает данные из базы данных? Как и в каком формате хранятся таблицы, хранящиеся в базе данных?

Я использую phpmyadmin, есть ли способ заглянуть в файлы, где хранятся данные? Я использую MySQL

4b9b3361

Ответ 1

Ну...

  • Сначала у вас есть синтаксическая проверка, за которой следует генерация дерева выражений - на этом этапе вы также можете проверить, существуют ли элементы и "выстраиваются в линию" (т.е. поля существуют в таблице). Это первый шаг - любая ошибка здесь, если вы просто скажите подателю, чтобы он стал реальным.
  • Тогда yo есть.... анализ. SQL-запрос отличается от программы тем, что он не говорит, КАК делать что-то, только КАКОЙ РЕЗУЛЬТАТ. Настроить логику. Таким образом, вы получаете анализатор запросов (в зависимости от продукта, плохого для хорошего - оракула долгое время, дерьмовые, самые чувствительные из них, даже измерения скорости диска), чтобы решить, как лучше всего подойти к этому результату. Это действительно сложный зверь - он может попробовать десятки или сотни подходов, чтобы найти тот, который, по его мнению, будет самым быстрым (основанный на затратах, в основном статистический).
  • Затем выполняется.

Анализатор запросов, кстати, - это то место, где вы видите огромные различия. Не уверен в том, что MySQL - SQL Server (Microsoft) сияет тем, что у него нет лучшего (но одного из хороших), но у него действительно есть хорошие визуальные инструменты для ПОКАЗАНИЯ плана запроса, сравните оценки, которые анализатор реальные потребности (если они слишком сильно отличаются, статистика таблицы может быть отключена, поэтому анализатор ДУМАЕТ, что большая таблица невелика). Они представляют это красиво визуально.

В течение некоторого времени у DB2 был отличный оптимизатор, измеряющий - я уже сказал - скорость диска, чтобы оценить его. Oracle долгое время оставался "слева направо" (без реального анализа) и использовал пользовательские подсказки для запросов (дерьмовый подход). Я думаю, что MySQL был очень примитивным в начале - не уверен, где он сейчас.

Формат таблицы в базе данных и т.д. - это действительно то, что вам не нужно. Это документировано (очевидно, особенно для базы данных с открытым исходным кодом), но почему вы должны заботиться? Я занимаюсь SQL-работой почти 15 лет или около того и никогда не нуждался в этом. И это включает в себя выполнение довольно высокой работы в некоторых областях. Если вы не попытаетесь создать инструмент для восстановления файлов базы данных... не имеет смысла беспокоиться.

Ответ 2

Это хороший вопрос, но на него нельзя ответить полностью.

Вы можете прочитать книгу Understanding MySQL Internals, которая даст вам ответы на большинство ваших вопросов.

Ответ 3

Порядок предложения оператора SQL execution-

ОТ → ГДЕ → ГРУППА ПО → ЕСТЬ → ВЫБРАТЬ → ЗАКАЗАТЬ ПО

Мой ответ относится только к базе данных Oracle, которая содержит учебные материалы, относящиеся к вашим запросам. Хорошо, когда ядро СУБД SQL обрабатывает любой запрос/оператор SQL, сначала он запускает синтаксический анализ и в ходе синтаксического анализа выполняет три проверки: Синтаксис, Семантический и Общий доступ бассейн. Чтобы узнать, как работают эти проверки? Перейдите по ссылке ниже.

По завершении анализа запроса запускается план Выполнение. Но эй, движок базы данных! ты достаточно умен. Вы проверяете, был ли этот SQL-запрос уже проанализирован (Soft Parse), если это так, то вы напрямую переходите к плану выполнения или же глубоко углубляетесь и оптимизируете запрос (Hard Parse), При выполнении жесткого анализа вы также используете программное обеспечение Row Source Generation, которое предоставляет План итеративного выполнения, полученный от оптимизатора. Довольно! см. этапы обработки SQL-запросов ниже.

enter image description here

Примечание - Перед планом выполнения он также выполняет операции Bind для значений переменных и после выполнения запроса выполняет выборку, чтобы получить записи и, наконец, сохранить их в наборе результатов. Короче говоря, порядок is-

PASRE → BIND → EXECUTE → FETCH

И для более подробной информации, этот учебник ждет вас. Это может быть полезно для кого-то.

Ответ 4

Если целевым продуктом является SQL Server, то эта статья является хорошим местом для начала.