Нет публики:Маленькое кофейное шоу Java,Веб-сайт:javaxks.com
Автор: Хаоюй Тяньшан, ссылка: cnblogs.com/liboware/p/12740901.html
1. Для mysql не рекомендуется использовать подзапросы и соединения, потому что эффективность самих соединений недостаточна.При большом объеме данных трудно гарантировать эффективность.Настоятельно рекомендуется получать данные по индексу единая таблица, а потом делайте в программе объединения данных.
2. Не используйте подзапросы.Эффективность слишком низкая.При выполнении подзапросов MYSQL необходимо создавать временные таблицы,а затем удалять эти временные таблицы после выполнения запроса.Поэтому скорость подзапросов будет быть затронуты в определенной степени Вот еще один Процесс создания и уничтожения временных таблиц.
3. Если это JOIN, то это вложенный запрос. Маленькие таблицы управляют большими таблицами и связаны через поля индекса. Если записи таблицы относительно малы, все еще в порядке. Если он большой, бизнес-логика может управлять обработкой.
4. База данных является нижним уровнем, а узким местом часто является база данных. Рекомендуется использовать базу данных только как инструмент для хранения данных, а не для расширения бизнеса.
1. Преимущества ассоциации прикладного уровня
Сделайте кеш более эффективным. Многие приложения могут удобно кэшировать объекты результатов, соответствующие однотабличным запросам. Если таблица в ассоциации изменяется, кэш запросов нельзя использовать, а после разделения, если таблица меняется редко, запрос на основе таблицы может повторно использовать результаты кэша запросов.
-
После декомпозиции запроса выполнение одного запроса может уменьшить количество конфликтов при блокировке.
-
Выполняя ассоциацию на прикладном уровне, проще разделить базу данных и легче добиться высокой производительности и масштабируемости.
-
Эффективность самого запроса также может быть повышена. При запросе набора идентификаторов использование IN() вместо запроса ассоциации позволяет MySQL запрашивать в порядке идентификаторов, что может быть более эффективным, чем случайная ассоциация.
-
Запросы на избыточные записи могут быть сокращены. Выполнение связанного запроса на уровне приложения означает, что приложению нужно запросить определенную запись только один раз, в то время как выполнение связанного запроса в базе данных может потребовать
-
Повторный доступ к части данных. С этой точки зрения, такой рефакторинг также может уменьшить сбои сети и памяти.
-
Идя дальше, это эквивалентно реализации хэш-ассоциаций в приложении вместо использования ассоциаций вложенных циклов MySQL. В некоторых сценариях ассоциации хэшей намного эффективнее.
2. Сценарии использования ассоциации прикладного уровня
-
Когда приложение может удобно кэшировать результаты одного запроса
-
Когда данные могут быть распределены по разным серверам MySQL
-
Когда метод IN() можно использовать вместо связанного запроса
-
Существует множество одновременных сценариев и частых запросов к БД, требующих подбазы данных и подтаблицы.
3. Причины, по которым присоединяться не рекомендуется
1. Бизнес-давление, которое берет на себя DB, велико, и бремя может быть уменьшено, если его можно уменьшить. Когда таблица находится на уровне миллионов, объединение приводит к снижению производительности;
2. Распределенная подбаза данных и подтаблица. В настоящее время не рекомендуется объединяться между библиотеками. В настоящее время распределенное промежуточное ПО MySQL имеет низкую производительность соединения между базами данных.
3. Измените схему таблицы. Легче изменить запрос к одной таблице. Оператор SQL, написанный соединением, необходимо изменить, что нелегко найти, и стоимость относительно велика. Когда система относительно большой, его трудно поддерживать.
В-четвертых, решение без использования соединения
На бизнес-уровне после запроса данных из одной таблицы они используются в качестве условия для запроса следующей одиночной таблицы. То есть подзапрос. Меня беспокоит, что из подзапроса выходит слишком много наборов результатов. MySQL не имеет ограничений на количество входов, но MySQL ограничивает размер всего оператора SQL. Настроив параметр max_allowed_packet, можно изменить максимальное значение sql. Рекомендуется хорошо поработать в бизнесе, и допустимо ограничить набор результатов одним запросом.
Пять, преимущества запроса на соединение
Преимущество связанного запроса в том, что его можно разбить на страницы, а в качестве условий запроса использовать поля вторичной таблицы, при запросе в качестве результирующего набора используются поля, совпадающие со вторичной таблицей, а в основной таблице войти в него. Но проблема в том, что если количество совпадающих данных слишком велико, это не сработает, а также приведет к тому, что возвращаемые записи с разбивкой на страницы будут отличаться от реальных. -time query, а front-end можно отображать пакетами. , предпосылка этого решения в том, что объем данных не слишком велик, т.к. длина самого sql ограничена.