MySQL всегда был очень слабой частью меня, и я напишу больше статей о MySQL, чтобы помочь вам позже. MySQL самоочевидна.Конечно, исследования по MySQL следует активизировать позже. Если письмо плохое, прошу меня простить.
Разница между нереляционной базой данных и реляционной базой данных, сравнение преимуществ
Нереляционная база данных (ощущение, что перевод не очень точен) называетсяNoSQL
, который является не только SQL, не только SQL. Нереляционным базам данных не нужно писать какие-то сложные операторы SQL, а их внутренние методы храненияkey-value
Существование формы можно представить себе как форму телефонной книги, где каждому телефону (ключу) соответствует имя человека (значение). Общие нереляционные базы данных:Hbase, Redis, MongoDBЖдать. Нереляционные базы данных не нуждаются в повторном разборе с помощью SQL, поэтому производительность очень высока, нереляционные базы данных имеют сильную масштабируемость и нет связи между данными. -value добавляется напрямую. Подойдет пара ключ-значение.
реляционная база данных с表格
существует в виде行和列
Доступ к данным в форме реляционной базы данных, эта последовательность строк и столбцов называется таблицей, и бесчисленные таблицы состоят из数据库
, распространенные реляционные базы данныхOracle, DB2, Microsoft SQL Server, MySQLЖдать. Реляционные базы данных могут поддерживать сложные SQL-запросы и могут отражать взаимосвязь между данными и таблицами; реляционные базы данных также поддерживают транзакции, которые легко зафиксировать или откатить.
Слабые стороны между ними основаны на сильных сторонах друг друга.
Четыре особенности транзакций MySQL
Когда дело доходит до транзакций MySQL, вы определенно можете выделить четыре основные особенности:原子性
,一致性
,隔离性
,持久性
, ниже приводится описание четырех характеристик этой транзакции.
-
原子性(Atomicity)
: Атомарность относится к операциям, которые включают транзакции в MySQL или全部成功
, или все失败回滚
, поэтому, если операция транзакции прошла успешно, она должна быть полностью применена к базе данных, а в случае сбоя операции она не может оказать никакого влияния на базу данных.
Здесь задействована концепция, что такое транзакция в MySQL?
Транзакция — это набор операций, и единицы, составляющие этот набор операций, либо завершаются успешно, либо терпят неудачу.
В MySQL транзакции реализованы на уровне движка, только с использованием
innodb
База данных или таблица движка поддерживает только транзакции.
-
一致性(Consistency)
: Согласованность означает, что транзакция имеет одинаковое состояние до и после выполнения. Например, сумма денег A и B составляет 1000 юаней, тогда независимо от того, как осуществляется перевод между A и B и сколько раз он переводится, сумма денег двух пользователей после транзакции завершено должно быть 1000, что является согласованностью транзакции. -
持久性(Durability)
: Постоянство означает, что после фиксации транзакции происходящие изменения являются постоянными, даже если база данных сталкивается с особыми обстоятельствами, такими как сбои, она не будет мешать. -
隔离性(Isolation)
: необходимо подчеркнуть изоляцию.Когда несколько транзакций выполняются одновременно, это может脏读(dirty read)
,不可重复读(non-repeatable read)
,幻读(phantom read)
Для решения этих проблем параллелизма предлагается концепция изоляции.
Грязное чтение: транзакция A считывает обновленные данные транзакции B, но транзакция B не фиксируется, а затем транзакция B выполняет операцию отката, после чего данные, считанные транзакцией A, являются грязными данными.
Неповторяющееся чтение: транзакция A выполняет несколько операций чтения, а транзакция B выполняет операции обновления и фиксации во время многократного чтения транзакции A. После фиксации данные, считанные транзакцией A, несовместимы.
Фантомное чтение: транзакция A изменяет оценки всех студентов в базе данных с A -> B. В это время транзакция B вручную вставляет запись с оценкой A. После изменения транзакции A обнаруживается, что есть еще одна запись, которая не было изменено, то этот вид называется фантомным чтением.
Существует четыре уровня изоляции SQL.读未提交(read uncommitted)
,读已提交(read committed)
,可重复读(repetable read)
и串行化(serializable)
. Поясним их отдельно.
Чтение незафиксированных: Чтение незафиксированных относится к тому факту, что изменения, сделанные транзакцией, могут быть видны другим транзакциям до того, как они будут зафиксированы.
Чтение зафиксировано: Чтение зафиксировано относится к тому факту, что после фиксации транзакции внесенные ею изменения могут быть видны другим транзакциям.
Повторяемое чтение. Повторяющееся чтение означает, что во время выполнения транзакции отображаемые данные совпадают с данными, отображаемыми при запуске. Незафиксированные изменения не видны другим транзакциям.
Сериализация: как следует из названия, для одной и той же строки записей写
добавит写锁
,读
добавит读锁
. Когда возникает конфликт блокировки чтения-записи, транзакция, к которой был получен доступ позже, должна дождаться завершения выполнения предыдущей транзакции, прежде чем продолжить.
Эти четыре уровня изоляции могут решить три типа проблем: грязное чтение, неповторяемое чтение и фантомное чтение. Подытожено следующим образом
Уровень изоляции транзакции | грязное чтение | неповторяемое чтение | галлюцинации |
---|---|---|---|
читать незафиксированные | позволять | позволять | позволять |
чтение зафиксировано | не допускается | позволять | позволять |
повторяемое чтение | не допускается | не допускается | позволять |
сериализовать | не допускается | не допускается | не допускается |
Уровень изоляции от низкого к высокому: чтение незафиксированного
Чем выше уровень изоляции, тем лучше можно гарантировать целостность и согласованность данных, но тем больше влияние на производительность параллелизма. Уровень по умолчанию для большинства баз данных读已提交(Read committed)
, такие как Sql Server, Oracle, но уровень изоляции MySQL по умолчанию可重复读(repeatable-read)
.
Различия между распространенными механизмами хранения MySQL
Общий механизм хранения MySQL, вы можете использовать
SHOW ENGINES
команда для вывода списка всех механизмов хранения
Как видите, InnoDB — это механизм хранения, поддерживаемый MySQL по умолчанию.Транзакции, блокировка на уровне строк и внешние ключи.
Возможности механизма хранения MyISAM
До версии 5.1 MyISAM был механизмом хранения MySQL по умолчанию. MyISAM имел плохой параллелизм и использовался в нескольких сценариях. Основные функции:
-
не поддерживается
事务
эксплуатации характеристики ACID не существуют, эта конструкция предназначена для производительности и эффективности. -
не поддерживается
外键
Операция, если принудительно добавить внешний ключ, MySQL не сообщит об ошибке, но внешний ключ не работает. -
Степень детализации блокировки MyISAM по умолчанию составляет
表级锁
, поэтому производительность параллелизма низкая, блокировки выполняются быстрее, конфликтов блокировок меньше, а вероятность взаимоблокировок меньше. -
MyISAM будет хранить на диске три файла, имя файла и имя таблицы совпадают, расширение
.frm(存储表定义)
,.MYD(MYData,存储数据)
,MYI(MyIndex,存储索引)
. Здесь важно отметить, что MyISAM кэширует только索引文件
, не кэширует файлы данных. -
Типы индексов, поддерживаемые MyISAM:
全局索引(Full-Text)
,B-Tree 索引
,R-Tree 索引
Полнотекстовый индекс: Появился для решения проблемы низкой эффективности нечеткого запроса текста.
Индекс B-дерева: все узлы индекса хранятся в соответствии со структурой данных сбалансированного дерева, и все узлы данных индекса находятся в листовых узлах.
Индекс R-Tree: его метод хранения отличается от индекса B-Tree. Он в основном предназначен для хранения пространства и многомерных полей данных для индексации. Текущая версия MySQL поддерживает только поля типа геометрии для индексации. По сравнению с BTREE, RTREE преимуществом является поиск диапазона.
-
Если хост, на котором расположена база данных, выходит из строя, файлы данных MyISAM легко повреждаются, и их трудно восстановить.
-
Добавление, удаление, изменение и производительность запросов: SELECT обладает высокой производительностью и подходит для многих запросов.
Особенности механизма хранения InnoDB
Начиная с MySQL 5.1 механизмом хранения по умолчанию стал механизм хранения InnoDB.По сравнению с MyISAM механизм хранения InnoDB претерпел серьезные изменения.Его основные функции:
- Поддержка операций с транзакциями с функцией изоляции ACID транзакций, уровень изоляции по умолчанию —
可重复读(repetable-read)
, через MVCC (одновременный контроль версий) для достижения. в состоянии решить脏读
и不可重复读
Проблема. - InnoDB поддерживает операции с внешним ключом.
- Детализация блокировки InnoDB по умолчанию
行级锁
, производительность параллелизма лучше, и возникнет взаимоблокировка. - Как и MyISAM, механизм хранения InnoDB также имеет
.frm文件存储表结构
Определения, но разница в том, что данные таблицы InnoDB и данные индекса хранятся вместе, и они расположены на B+ конечных узлах, в то время как данные таблицы MyISAM и данные индекса разделены. - InnoDB имеет безопасный файл журнала, который используется для восстановления потерянных данных из-за сбоев базы данных или других ситуаций для обеспечения согласованности данных.
- Типы индексов, поддерживаемые InnoDB и MyISAM, одинаковы, но конкретная реализация сильно отличается из-за разных файловых структур.
- С точки зрения производительности добавления, удаления, модификации и запросов, если выполняется большое количество добавлений, удалений и модификаций, рекомендуется использовать механизм хранения InnoDB, который удаляет строки во время операций удаления и не перестраивает таблицы.
Сравнение механизмов хранения MyISAM и InnoDB
-
锁粒度方面
: Из-за разной степени детализации блокировки InnoDB поддерживает более высокий параллелизм, чем MyISAM; степень детализации блокировки InnoDB — это блокировка строки, степень детализации блокировки MyISAM — блокировка таблицы, а блокировка строки должна блокировать каждую строку, поэтому накладные расходы на блокировку выше, но это может решить проблему. проблема грязных чтений и неповторяющихся чтений, и это относительно более склонно к взаимоблокировкам -
可恢复性上
: Поскольку InnoDB имеет журнал транзакций, его можно восстановить в соответствии с файлом журнала после возникновения таких условий, как сбой базы данных. MyISAM, с другой стороны, не имеет журнала транзакций. -
查询性能上
: MyISAM лучше, чем InnoDB, потому что InnoDB необходимо поддерживать кэш данных во время процесса запроса, а процесс запроса сначала находит блок данных, в котором находится строка, а затем находит строку для поиска из блока данных; в то время как MyISAM можно напрямую найти адрес памяти, где находятся данные, и данные можно найти напрямую. -
表结构文件上
: файлы структуры таблицы MyISAM включают: .frm (определение структуры таблицы), .MYI (индекс), .MYD (данные), а файлы данных таблицы InnoDB: .ibd и .frm (определение структуры таблицы);
Инфраструктура MySQL
Этот вопрос следует понимать из архитектуры MySQL, мы можем разобрать MySQL на несколько частей, как показано на следующем рисунке.
Грубо говоря, MySQL можно разделить наServer
слой и存储引擎
Этаж.
Уровень сервера включает в себя коннекторы, кэши запросов, анализаторы, оптимизаторы и исполнители, включая большинство основных функций MySQL, и на этом уровне также реализованы все функции кросс-хранилища, в том числеХранимые процедуры, триггеры, представления и т. д..
Уровень механизма хранения включает в себя общие механизмы хранения MySQL, в том числеMyISAM, InnoDB и памятьи т. д., наиболее часто используемым является InnoDB, который теперь является механизмом хранения по умолчанию для MySQL. Механизм хранения также можно указать вручную при создании таблицы, например, следующий
CREATE TABLE t (i INT) ENGINE = <Storage Engine>;
Затем мы можем обсудить процесс выполнения MySQL.
Соединитель
Во-первых, вам нужно войти в клиент MySQL, чтобы использовать его, поэтому вам нужен连接器
Для подключения пользователей и баз данных MySQL мы обычно используем
mysql -u 用户名 -p 密码
Чтобы войти в MySQL и установить соединение с сервером. по окончанииTCP 握手
После этого коннектор проверит ваш логин на основе введенных вами имени пользователя и пароля. Если имя пользователя или пароль неверны, MySQL предложитAccess denied for user, чтобы завершить выполнение. Если вход в систему выполнен успешно, MySQL определит ваши разрешения на основе записей в таблице разрешений.
кэш запросов
После того, как соединение будет завершено, вы можете выполнить оператор SQL, и эта логическая цепочка перейдет ко второму шагу: запросу кеша.
После того, как MySQL получит запрос на выполнение, он сначала перейдет к查询缓存
Найдите, был ли выполнен этот оператор SQL, ранее выполненный оператор, и результат будет отображаться вkey-value
Правильная форма помещается прямо в память. Ключ — это оператор запроса, а значение — результат запроса. Если оператор SQL можно найти по ключу, результат выполнения SQL будет возвращен напрямую.
Если оператора нет в кэше запросов, он перейдет к следующему этапу выполнения. После завершения выполнения результат выполнения помещается в кеш запросов. Видно, что если запрос попадет в кеш, MySQL может напрямую вернуть результат без выполнения следующих сложных операций, и эффективность будет очень высокой.
Но кеш запросов не рекомендуется
Зачем? Поскольку, пока операция обновления выполняется в таблице в MySQL, все кэши запросов будут признаны недействительными.Для баз данных с частыми обновлениями частота попаданий в кэш запросов очень низкая.
Анализатор
Если запрос не выполняется, выполняется реальный оператор SQL.
- Сначала MySQL проанализирует написанный вами оператор SQL, а анализатор сначала выполнит
词法分析
, написанный вами SQL представляет собой инструкцию SQL, состоящую из нескольких строк и пробелов. MySQL должен определить, что представляют собой строки и что они представляют. - затем продолжайте
语法分析
, по результатам лексического анализа синтаксический анализатор определит, удовлетворяет ли введенный вами оператор SQL грамматике MySQL в соответствии с правилами грамматики. Если оператор SQL неверен, он предложитYou have an error in your SQL syntax
оптимизатор
После лексического анализа и синтаксического анализа анализатора ваш SQL будет合法
Теперь MySQL знает, что вы собираетесь делать. Но перед выполнением оптимизатор должен быть обработан.Оптимизатор определит, какой индекс вы используете и какое соединение вы используете.Роль оптимизатора состоит в том, чтобы определить наиболее эффективный план выполнения.
Актуатор
MySQL через анализатор знает, допустимо ли ваше SQL-предложение, какую операцию вы хотите выполнить, а через оптимизатор знает, как это сделать наиболее эффективно, а затем входит в фазу выполнения и начинает выполнять это SQL-предложение.
На этапе выполнения MySQL сначала определит, есть ли у вас разрешение на выполнение этого оператора.Если у вас нет разрешения, он вернет ошибку отсутствия разрешения. Если у вас есть разрешение, откройте таблицу, чтобы продолжить выполнение. Когда таблица открыта, исполнитель будет использовать интерфейс, предоставляемый движком, в соответствии с определением движка таблицы. Для индексированных таблиц выполняемая логика аналогична.
На этом выполнение оператора MySQL завершено.
Порядок выполнения SQL
Когда мы пишем оператор запроса
SELECT DISTINCT
< select_list >
FROM
< left_table > < join_type >
JOIN < right_table > ON < join_condition >
WHERE
< where_condition >
GROUP BY
< group_by_list >
HAVING
< having_condition >
ORDER BY
< order_by_condition >
LIMIT < limit_number >
Вы знаете порядок его выполнения? Этот вопрос дает вам ответ.
ОТ связи
Во-первых, при выполнении запроса к оператору SELECTFROM
Будет сформирована таблица выполнения соединения по обеим сторонам ключевых слов笛卡尔积
, то будет虚表VT1(virtual table)
Сначала позвольте мне объяснить, что такое
笛卡尔积
Теперь у нас есть два набора A = {0,1} , B = {2,3,4}
Тогда результат, полученный из множества A * B, равен
А * В = {(0,2), (1,2), (0,3), (1,3), (0,4), (1,4)};
В * А = {(2,0), {2,1}, {3,0}, {3,1}, {4,0}, (4,1)};
Результаты приведенных выше A * b и b * a можно назвать умножением двух коллекций.
笛卡尔积
Мы можем сделать вывод, что произведение множества A и множества B содержит сумму элементов множества A и элементов множества B, то есть количество элементов множества A * количество элементов множества B
Позвольте мне объяснить, что такое виртуальная таблица
В MySQL есть три типа таблиц
один
永久表
, постоянная таблица — это таблица, которая используется для хранения данных в течение длительного времени после созданияодин
临时表
Также существует два типа временных таблиц, один такой же, как и постоянные таблицы, которые только сохраняют временные данные, но могут существовать длительное время; другой создается временно и будет удален после выполнения оператора SQL.один
虚表
, виртуальная таблица на самом деле视图
, данные могут поступать из результатов выполнения нескольких таблиц.
ВКЛ фильтр
Затем выполните фильтрацию ON для результата соединения FROM, создайте VT2 и сохраните условия, соответствующие записи в VT2.
ПРИСОЕДИНЯЙСЯ к соединению
Третий шаг, если даOUTER JOIN(left join、right join)
, то этот шаг добавит внешнюю строку, если это левое соединение, добавьте левую таблицу условия фильтра ON, если это правое соединение, добавьте правую таблицу, чтобы создать новую виртуальную таблицу VT3.
ГДЕ фильтр
Четвертый шаг — выполнить фильтр WHERE, обратиться к фильтру WHERE к виртуальной таблице, созданной на предыдущем шаге, и сгенерировать виртуальную таблицу VT4.
Разница между ГДЕ и ВКЛ
- Если есть внешние столбцы, значение ON для связанной таблицы для фильтрации, а основная таблица (зарезервированная таблица) будет возвращать все столбцы;
- Если внешний столбец не добавлен, эффект от обоих одинаковый;
применение
- Фильтрация в основной таблице должна использовать WHERE;
- Для реляционных таблиц ON используется для условного запроса перед объединением, а WHERE используется для условного запроса после объединения;
GROUP BY
В соответствии со столбцами в предложении group by записи в VT4 будут сгруппированы для создания таблицы виртуальной машины VT5. Если применяется группировка, то все последующие шаги могут получить только столбцы VT5 или агрегатные функции (счетчик, сумма, среднее и т. д.).
HAVING
Сразу после того, как предложение GROUP BY имеет значение HAVING, использование HAVING для фильтрации поместит квалифицированные в VT6.
SELECT
На седьмом шаге выполняется оператор SELECT, и результаты в VT6 выбираются в соответствии с SELECT для генерации VT7.
DISTINCT
На восьмом этапе записи, сгенерированные TV7, дедуплицируются для создания VT8. На самом деле отличие является избыточным, если применяется предложение group by, а также потому, что при группировке уникальные значения в столбце группируются вместе, и для каждой группы возвращается только одна строка, тогда все записи не будут одинаковыми.
ORDER BY
Применить порядок по пункту. Сортировка VT8 по порядку_по_условию возвращает курсор вместо виртуальной таблицы. sql основан на теории множеств, набор не упорядочивает свои строки, это просто логический набор элементов, порядок членов не имеет значения.
Процесс выполнения оператора SQL выглядит следующим образом.
Что такое временная таблица и когда удалять временную таблицу
Что такое временная таблица? В процессе выполнения операторов SQL MySQL обычно временно создает некоторые存储中间结果集
Временная таблица видна только текущему соединению.Когда соединение будет закрыто, временная таблица будет удалена, а все табличное пространство будет освобождено.
Существует два типа временных таблиц: один内存临时表
, один磁盘临时表
, какая разница? Временные таблицы в памяти используют механизм хранения MEMORY, а временные таблицы используют механизм хранения MyISAM.
Механизм хранения ПАМЯТИ:
memory
— это особый класс механизма хранения в MySQL, который использует содержимое, хранящееся в содержимом, для создания таблиц, иВсе данные в памяти. Каждая таблица, основанная на механизме хранения MEMORY, фактически соответствует файлу на диске. Файл имеет то же имя, что и имя таблицы, и имеет типfrm
тип. Файлы данных хранятся в памяти, что способствует быстрой обработке данных и повышает эффективность всей таблицы. ПАМЯТЬ редко используется, потому что она хранит данные в памяти, и если в памяти есть аномалия, данные будут затронуты. Если вы перезапустите или выключите, все данные исчезнут. Поэтому таблицы на основе MEMORY имеют короткий срок службы и, как правило, одноразовые.
MySQL будет генерировать временные таблицы в следующих ситуациях.
-
Используйте запрос UNION: существует два типа UNION, один из них
UNION
, одинUNION ALL
, все они используются для совместного запроса; разница в том, что использование UNION удалит повторяющиеся данные в двух таблицах, что эквивалентно некоторым действиям с результирующим набором.去重(distinct)
. Используйте UNION ALL, чтобы вернуть все строки без сортировки. Запрос с помощью UNION создает временные таблицы. -
использовать
TEMPTABLE 算法
Или представление в запросе UNION. Алгоритм TEMPTABLE — это алгоритм создания временной таблицы, который помещает результат во временную таблицу, что означает, что MySQL должен сначала создать временную таблицу, затем поместить результат во временную таблицу, а затем использовать эту временную таблицу для обработки. соответствующий запрос. -
Временные таблицы также генерируются, когда предложения ORDER BY и GROUP BY различаются.
-
запрос DISTINCT и добавление ORDER BY;
-
Когда в SQL используется параметр SQL_SMALL_RESULT; если результат запроса относительно мал, вы можете добавить SQL_SMALL_RESULT для оптимизации и создания временной таблицы.
-
подзапросы в FROM;
-
EXPLAIN Просмотрите дополнительный столбец результата плана выполнения, если вы используете
Using Temporary
Это означает, что будет использоваться временная таблица.
Общие типы индексов MySQL
Индексы хранятся в определенных столбцах таблицы.数据结构
Индекс создается для столбца. Кроме того, индекс является структурой данных.
В MySQL в основном есть следующие индексы
-
全局索引(FULLTEXT)
: Глобальный индекс, в настоящее время только движок MyISAM поддерживает глобальный индекс, похоже, это решает проблему низкой эффективности нечеткого запроса для текста. -
哈希索引(HASH)
: Хэш-индекс — это структура данных уникальных пар ключ-значение, используемая в MySQL, которая очень подходит в качестве индекса. HASH-индекс имеет преимущество одноразового позиционирования, ему не нужно искать узел за узлом, как дерево, но такой вид поиска подходит для случая поиска одиночного ключа, для поиска по диапазону, производительности HASH-индекса будет очень низким. -
B-Tree 索引
: B означает Balance, BTree — это сбалансированное дерево, у него много вариантов, наиболее распространенным является B+ Tree, которое широко используется MySQL. -
R-Tree 索引
: R-Tree редко используется в MySQL и поддерживает только тип данных геометрии. Единственными механизмами хранения, которые поддерживают этот тип, являются MyISAM, BDb, InnoDb, NDb и Archive. По сравнению с B-Tree, R-Tree имеет преимущество в области действия. , Найдите.
Различия и сценарии использования между varchar и char
В MySQL нет типа данных NVARCHAR, поэтому он напрямую сравнивается с varchar и char.
char
: Значит это定长
Строка, когда вы вводите меньше указанного числа, такого как указанное вами число,char(6)
, когда вы вводите менее 6 символов, char заполнит пустое значение после вашего последнего символа. Когда вы введете больше, чем указанная максимально допустимая длина, MySQL сообщит об ошибке
varchar
: varchar относится к переменной длины длиной n байтов и非Unicode
данные персонажа. Значение n — это число от 1 до 8000. Размер хранилища является фактическим размером.
Unicode — это схема кодирования символов, которая устанавливает единую и уникальную двоичную кодировку для каждого символа на каждом языке для выполнения требований к кросс-языковому и кросс-платформенному преобразованию и обработке текста.
Очень удобно использовать char для хранения данных фиксированной длины, а эффективность извлечения символов высока.Независимо от того, достигают ли данные, которые вы храните, 10 байтов, вы должны занимать 10 байтов пространства.
Использование varchar позволяет хранить данные переменной длины, но эффективность хранения не так высока, как у char.
Что такое внутреннее соединение, внешнее соединение, перекрестное соединение, декартово произведение
Существует три основных способа подключения:Внешнее соединение, внутренняя ссылка, перекрестное соединение
-
外连接(OUTER JOIN)
: существует три типа внешних соединений:左外连接(LEFT OUTER JOIN 或 LEFT JOIN)
,右外连接(RIGHT OUTER JOIN 或 RIGHT JOIN)
,全外连接(FULL OUTER JOIN 或 FULL JOIN)
Левое внешнее соединение: этот метод соединения, также известный как левое соединение, будет отображать строки данных, которые не соответствуют условиям в левой таблице, а строки данных, которые не соответствуют условиям в правой таблице, напрямую отображают NULL.
Правое внешнее соединение: также известное как правое соединение, оно противоположно левому соединению.Этот метод соединения отображает строки данных, которые не соответствуют условиям в правой таблице, и строки данных, которые не соответствуют условиям в левой таблице. напрямую отображать NULL
В настоящее время MySQL не поддерживает полные внешние соединения.
-
内连接(INNER JOIN)
: объединить одинаковые поля в двух таблицах и вернуть записи, связанные поля которых совпадают.
-
笛卡尔积(Cartesian product)
: Я упомянул о декартовом произведении выше, но для удобства я снова перечислю его ниже.
Теперь у нас есть два набора A = {0,1} , B = {2,3,4}
Тогда результат, полученный из множества A * B, равен
А * В = {(0,2), (1,2), (0,3), (1,3), (0,4), (1,4)};
В * А = {(2,0), {2,1}, {3,0}, {3,1}, {4,0}, (4,1)};
Результат A * B и B * A выше можно назвать умножением двух множеств
笛卡尔积
Мы можем сделать вывод, что произведение множества A и множества B содержит сумму элементов множества A и элементов множества B, то есть количество элементов множества A * количество элементов множества B
-
Оригинальный текст кросс-коннекта
Cross join
, который является реализацией декартова произведения в SQL с использованием ключевого слова в SQLCROSS JOIN
Чтобы представить перекрестное соединение, в перекрестном соединении добавление поля таблицы будет иметь большое влияние на результат.SELECT * FROM t_Class a CROSS JOIN t_Student b WHERE a.classid=b.classid
Или без CROSS JOIN, прямое использование FROM также может выражать эффект перекрестного соединения.
SELECT * FROM t_Class a ,t_Student b WHERE a.classid=b.classid
Если в таблице много полей, использование перекрестного соединения нецелесообразно, а эффективность перекрестного соединения относительно низкая.
-
Полное соединение: полное соединение
full join
, полное соединение не поддерживается в MySQL, но для имитации полного соединения можно использовать другие запросы соединения, вы можете использоватьUNION
иUNION ALL
Проведите симуляцию. Например(select colum1,colum2...columN from tableA ) union (select colum1,colum2...columN from tableB ) 或 (select colum1,colum2...columN from tableA ) union all (select colum1,colum2...columN from tableB );
Примечания по использованию UNION и UNION ALL
Количество столбцов, извлекаемых SQL по отдельности, связанных объединением, должно быть одинаковым.
При использовании объединения несколько одинаковых строк будут объединены.Поскольку объединение занимает много времени, объединение обычно не используется напрямую для слияния, но объединение всех обычно используется для слияния.
Расскажите об опыте оптимизации SQL
- Независимо от того, какое условие суждения используется в операторе запросаравно, меньше, больше,
WHERE
Не используйте функции или выражения в поле условного запроса слева. - использовать
EXPLAIN
Команда оптимизирует ваш запрос SELECT.Для сложных и неэффективных операторов sql мы обычно используем команду объяснения sql для анализа оператора sql, который нам удобен для анализа и оптимизации. - Когда в вашем операторе запроса SELECT нужно использовать только одну запись, используйте
LIMIT 1
- Не используйте напрямую
SELECT *
, вы должны использовать поля таблицы, которые должны быть специально запрошены. - Установите свойство ID для каждой таблицы
- избегать в
WHERE
поле в предложенииNULL
судить - избегать в
WHERE
используется в!=
или<>
оператор - использовать
BETWEEN AND
альтернативаIN
- Создайте индекс для поля поиска
- Выберите правильный механизм хранения, InnoDB, MyISAM, MEMORY и т. д.
- использовать
LIKE %abc%
не будет ходить по индексу, но использоватьLIKE abc%
пойдет индекс - Для полей типа перечисления (то есть полей с фиксированными перечисляемыми значениями) рекомендуется использовать
ENUM
вместоVARCHAR
, такие как пол, неделя, тип, категория и т. д. - Разделить большие операторы DELETE или INSERT
- Выберите соответствующий тип поля, критерии выборакак можно меньше, как можно фиксированной длины, как можно больше целых чисел.
- Полевой дизайн максимально использует
NOT NULL
- Сделайте горизонтальные разрезы или вертикальные разрезы
Горизонтальное разделение: храните данные отдельно, создавая несколько таблиц с одинаковой структурой.
Вертикальное разбиение: Поместите поля, которые часто используются вместе, в отдельную таблицу, и между записями разделенной таблицы будет взаимно однозначное соответствие.
Ссылка на статью:
Блог Woohoo.cn на.com/sharpest/afraid/…
blog.CSDN.net/Оригинал 2ISO ft/AR…
Блог Woo Woo.cn on.com/Rooster Year Average/Ах…
ву ву .cn блог на.com/huihuixi/afraid/…
Woohoo.PHP.Can/Initiated/418056. …
baike.baidu.com/item/clustered index/1…
blog.CSDN.net/CSDN_Red Guest Alliance/Ах…
Знайте. Baidu.com/question/30…
baike.baidu.com/item/index/571…
Блог Wooooooo.cn на.com/ghost error/fear/8…
блог woo woo woo.cn на.com/yuxiuyan/afraid/…
Вууху.Основное 51.net/article/147…
woo woo woo.cn blog on.com/Чжан Чао ест…
Encyclopedia.Baidu.com/item/MyISAM…
сегмент fault.com/ah/119000001…
"Geek Time" - MySQL Практика 45 лекций
woo woo woo.cn блог на.com/я хочу открыть/боюсь/1…
блог woo woo woo.cn на.com/trance case/afraid…