моя контактная информация
Почтамезофия@protonmail.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Язык SQL разделен на четыре категории: язык запросов данных DQL, язык манипулирования данными DML, язык определения данных DDL и язык управления данными DCL.
1. Язык запросов данных DQL
Базовая структура языка запросов данных DQL представляет собой блок запроса, состоящий из предложения SELECT, предложения FROM и предложения WHERE: SELECT <имя поля таблицы> FROM <имя таблицы или представления> WHERE <условия запроса>
2. Язык манипулирования данными DML
Существует три основные формы языка манипулирования данными DML:
1) Вставка: ВСТАВКА
2) Обновление: ОБНОВЛЕНИЕ
3) Удалить: УДАЛИТЬ
3. Язык определения данных DDL
Язык определения данных DDL используется для создания различных объектов в базе данных ----- таблиц, представлений, индексов, синонимов, кластеров и т. д., таких как: CREATE TABLE / VIEW / INDEX / SYN / CLUSTER Кластер синонимов индекса табличного представления | . Операции DDL выполняются неявно! Невозможно выполнить откат
4. Язык управления данными DCL
Язык управления данными DCL используется для предоставления или отзыва определенных привилегий для доступа к базе данных, управления временем и эффектом транзакций манипулирования базой данных, а также мониторинга базы данных. нравиться:
1) ГРАНТ: Авторизация.
2) ОТКАТ [РАБОТЫ] ДО [SAVEPOINT]: Откат до определенной точки. Откат ---ROLLBACK Команда отката возвращает состояние базы данных к последнему отправленному состоянию. Его формат: SQL>ROLLBACK;
3) COMMIT [РАБОТА]: Отправить. Во время операций вставки, удаления и изменения базы данных транзакция завершается только после ее отправки в базу данных. До того, как транзакция будет зафиксирована, только тот, кто управляет базой данных, имеет право видеть, что было сделано. Остальные смогут увидеть это только после завершения окончательной фиксации.
Команда авторизации базы данных:
GRANT<разрешение> для имени таблицы (или имени столбца) пользователю
Правильный вариант ответа B: вставить, выбрать: имя таблицы разрешений: пользователь пользователь: nkw
Дополнительные очки знаний – разрешения на переработку
REVOKE <разрешение> для имени таблицы (или имени столбца) ОТ пользователя
Я думаю, что все знакомы с оператором объяснения, который используется для просмотра плана выполнения. Объяснение часто используется в анализе оптимизации SQL.
Здесь стоит отметить: объяснение фактически не выполняет оператор, а лишь отображает план выполнения.
Какую информацию я могу увидеть?
- EXPLAIN SELECT select具体语句
- 如:
- EXPLAIN SELECT * FROM userpro
Список | описывать | Пополнить |
идентификатор | Каждое ключевое слово SELECT соответствует идентификатору | |
выберите_тип | Тип запроса, соответствующий ключевому слову SELECT | |
стол | Имя таблицы | |
перегородки | Соответствующая информация о разделах | |
тип | Метод доступа для одной таблицы | |
возможные_ключи | Возможные индексы | |
ключ | фактический используемый индекс | |
key_len | Фактическая длина используемого индекса | |
ссылка | При использовании запроса на эквивалентность столбца индекса — информация об объекте, которая соответствует столбцу индекса на предмет эквивалентности. | |
ряды | Предполагаемое количество записей, которые необходимо прочитать | |
отфильтровано | Процент оставшихся записей после фильтрации по критериям поиска |
|
Дополнительный | Дополнительная информация |
1,идентификатор
Каждое ключевое слово SELECT соответствует идентификатору
Чем больше значение id, тем выше приоритет и оно будет выполнено в первую очередь.
Если идентификаторы одинаковы, их можно рассматривать как группу и выполнять последовательно сверху вниз.
Каждый идентификационный номер представляет собой независимый запрос. Чем меньше запросов в операторе SQL, тем лучше.
2,выберите_тип
категория | иллюстрировать |
ПРОСТОЙ | Запрос одной таблицы, без подзапроса или запроса UNION. |
НАЧАЛЬНЫЙ | Самый внешний оператор SELECT в запросе. |
ПОДЗАПРОС | В предложении WHERE используется подзапрос. |
ПОЛУЧЕННЫЙ | Для подзапросов, содержащихся в предложении FROM, MySQL помечает его как DERIVED (производный) и генерирует временную таблицу для своего набора результатов для использования внешним запросом. |
СОЮЗ | Второй и последующие операторы запроса в запросе UNION. |
РЕЗУЛЬТАТ СОЮЗА | Результирующий набор запроса UNION. |
ЗАВИСИМЫЙ ПОДЗАПРОС | Результат подзапроса зависит от значения внешнего запроса, и подзапрос выполняется один раз для каждой строки внешнего запроса. |
ЗАВИСИМЫЙ СОЮЗ | Второй и последующие операторы запроса UNION, а результаты зависят от значения внешнего запроса. |
НЕКЭШИРУЕМЫЙ ПОДЗАПРОС | Подзапрос не может быть кэширован и будет выполняться каждый раз, когда на него ссылаются. |
3. Столбец таблицы представляет имя таблицы (иногда это не настоящее имя таблицы, это может быть аббревиатура).
4. перегородки (по желанию)
5. тип ☆
Общие типы следующие:
тип | иллюстрировать |
система | В таблице обычно только одна строка SELECT ... FROM DUAL Оптимизация запросов. |
константа | Запрос находится по индексу один раз, имея только одну строку результатов (таблица констант). |
eq_ref | Используйте уникальный индекс или первичный ключ, чтобы найти строку из другой таблицы. |
ссылка | Используйте неуникальный индекс, чтобы найти одну или несколько строк из другой таблицы. |
диапазон | Возвращает диапазон строк, используя индекс. |
индекс | Полностью сканирует индекс для поиска строк, а не сканирует всю таблицу. |
все | При полном сканировании таблицы проверяется каждая строка таблицы. |
В общем, старайтесь избегать всего
6, ключ и возможные_ключи
ключ:
key
Поле показывает фактический индекс, используемый запросом.Если значение этого поляNULL
, что указывает на то, что индекс не используется. Если это поле имеет значение, это означает, что MySQL использовал указанный индекс для выполнения запроса.возможные_ключи:
possible_keys
Поле отображает список индексов, которые MySQL может использовать. Эти индексы — это индексы, которые могут учитываться в запросах, но фактически не могут использоваться. обычно,possible_keys
Перечисленные индексы определяются на основе условий запроса и структуры таблицы.если key
Поле имеет индексное имя иpossible_keys
В списке перечислены несколько имен индексов, что указывает на то, что MySQL выбралkey
Индекс, в котором указано поле, используется для выполнения запроса, а остальные индексы перечислены в списке.possible_keys
Medium заявил, что его также можно рассмотреть, но в конечном итоге не использовать.
если key
ПоляNULL
,и possible_keys
Несколько имен индексов перечислены в , что указывает на то, что MySQL не использует какой-либо индекс при выполнении запроса, что может привести к полному сканированию таблицы или другим методам доступа, не оптимизированным по индексу.
7, key_len
key_len
Поле, описывающее длину индексного ключа. Он указывает использование индекса и длину индексного ключа, когда MySQL использует определенный индекс для выполнения запросов.
Индекс одного столбца:
INT
),но key_len
Значение представляет собой длину столбца.VARCHAR
),но key_len
Значение — максимальная длина поля.составной индекс:
key_len
Представляет общую длину всех столбцов в индексе.комбинированный индекс:
key_len
— общая длина всех столбцов в объединенном индексе.индексный префикс:
key_len
Будет показана фактическая длина используемой индексной части.8, ссылка
ref
Это поле, которое описывает условия соединения между таблицами или использует для поиска неуникальный индекс. Он указывает, какие условия соединения или какие индексы MySQL использует для доступа к таблице при выполнении запроса.
9, ряды
rows
Это оценка количества строк, к которым осуществляется доступ или которые проверяются при выполнении запроса.
SELECT
Спросите,rows
Представляет предполагаемое количество возвращаемых строк.JOIN
) или подзапрос,rows
Может представлять количество строк, к которым осуществляется доступ во время операции соединения.rows
Может представлять количество просканированных строк.10, отфильтровано
Представляет процент строк, отфильтрованных на основе условий WHERE и условий индекса. filtered отражает эффект оптимизации запроса, оцененный оптимизатором.
когда filtered
Когда оно близко к 100 %, это означает, что условия запроса эффективно отфильтровали большинство строк, не соответствующих условиям, что обычно является хорошим показателем оптимизации.
Напротив, если filtered
Низкое значение может указывать на то, что условия запроса недостаточно точны или что оптимизатор неэффективно использует индекс для фильтрации данных.
11,Экстра
Дополнительные информационные поля
Вот некоторые распространенные Extra
Поля и их значения:
Использование индекса:
Используя где:
Использование временных:
Использование сортировки файлов:
Диапазон проверяется для каждой записи (карта индекса: ...):
range
В типе запроса.Полное сканирование по ключу NULL:
Отчетливый:
Использование буфера соединения (блочный вложенный цикл):
Невозможно ГДЕ:
Таблицы не используются:
SELECT NOW()
。- CREATE TABLE s1 (
- id INT AUTO_INCREMENT,
- key1 VARCHAR(100),
- key2 INT,
- key3 VARCHAR(100),
- key_part1 VARCHAR(100),
- key_part2 VARCHAR(100),
- key_part3 VARCHAR(100),
- common_field VARCHAR(100),
- PRIMARY KEY (id),
- INDEX idx_key1 (key1),
- UNIQUE INDEX idx_key2 (key2),
- INDEX idx_key3 (key3),
- INDEX idx_key_part(key_part1, key_part2, key_part3)
- ) ENGINE=INNODB CHARSET=utf8;
- CREATE TABLE s2 (
- id INT AUTO_INCREMENT,
- key1 VARCHAR(100),
- key2 INT,
- key3 VARCHAR(100),
- key_part1 VARCHAR(100),
- key_part2 VARCHAR(100),
- key_part3 VARCHAR(100),
- common_field VARCHAR(100),
- PRIMARY KEY (id),
- INDEX idx_key1 (key1),
- UNIQUE INDEX idx_key2 (key2),
- INDEX idx_key3 (key3),
- INDEX idx_key_part(key_part1, key_part2, key_part3)
- ) ENGINE=INNODB CHARSET=utf8;
Данные готовятся самостоятельно.
Запрос одной таблицы
EXPLAIN SELECT * FROM `s1`;
Присоединиться к запросу
EXPLAIN SELECT * FROM `s1` INNER JOIN `s2`;
подзапрос
- EXPLAIN SELECT * FROM s1 WHERE key1 IN (SELECT key2 FROM s2 WHERE common_field
- = 'a');
- #Union 去重
- EXPLAIN SELECT * FROM `s1` UNION SELECT * FROM `s2`;
- #Union 全查
- EXPLAIN SELECT * FROM `s1` UNION ALL SELECT * FROM `s2`;
Последний шаг — дедупликация, поэтому будет использоваться временная таблица. Однако UNION ALL — это запрос для всех, и сообщение запроса временной таблицы не появится.
const (найти индекс один раз, только одна строка результатов)
EXPLAIN SELECT * FROM s1 WHERE id = 10002;
eq_ref (найти строку из другой таблицы, используя уникальный индекс или первичный ключ)
EXPLAIN SELECT * FROM s1 INNER JOIN s2 ON s1.id = s2.id;
ref (используйте неуникальный индекс для поиска одной или нескольких строк из другой таблицы)
EXPLAIN SELECT * FROM s1 WHERE key1 = 'a';
диапазон (возвращает диапазон строк с использованием индекса)
EXPLAIN SELECT * FROM s1 WHERE key1 IN ('a', 'b', 'c');
индекс (полное сканирование индекса для поиска строк)
EXPLAIN SELECT key_part2 FROM s1 WHERE key_part3 = 'a';
фильтрованное десятичное время
EXPLAIN SELECT * FROM s1 WHERE key1 > 'za' AND common_field = 'la'