Почему MySQL устарел с использованием соединения?

задняя часть MySQL

публика:Маленькое кофейное шоу Java,Веб-сайт:javaxks.com

Автор: Ли Бо, ссылка:cn blog on.com/libova Fear/fear/…

1. Для mysql не рекомендуется использовать подзапросы и соединения, потому что эффективность соединений сама по себе является недостатком.При большом объеме данных трудно гарантировать эффективность.Настоятельно рекомендуется использовать индексы отдельно.

Получите данные из одной таблицы, а затем объедините и объедините данные в программе.

2. Не используйте подзапросы.Эффективность слишком низкая.При выполнении подзапросов MYSQL необходимо создавать временные таблицы,а затем удалять эти временные таблицы после выполнения запроса.Поэтому скорость подзапросов будет быть уменьшена.

В определенной степени затронут дополнительный процесс создания и уничтожения временных таблиц.

3. Если это JOIN, то это вложенный запрос. Маленькие таблицы управляют большими таблицами и связаны через поля индекса. Если записей в таблице относительно немного, все еще в порядке. большие слова

Обработкой можно управлять в бизнес-логике.

4. База данных является нижним уровнем, а узким местом часто является база данных. Рекомендуется, чтобы база данных использовалась только как инструмент для хранилища данных, а не добавляла к ней бизнес.

Сделайте кеш более эффективным. Многие приложения могут удобно кэшировать объекты результатов, соответствующие однотабличным запросам. Если одна из таблиц в ассоциации изменилась, вы не можете использовать запрос

Запрос кэшируется, и после разделения, если таблица редко изменяется, запрос, основанный на этой таблице, может повторно использовать результаты кэша запроса.

После декомпозиции запроса выполнение одного запроса может уменьшить количество конфликтов при блокировке.

Выполняя ассоциацию на прикладном уровне, проще разделить базу данных и легче добиться высокой производительности и масштабируемости.

Эффективность самого запроса также может быть повышена. При запросе набора идентификаторов использование IN() вместо запроса ассоциации позволяет MySQL запрашивать в порядке идентификаторов, что может быть более эффективным, чем случайная ассоциация.

Это может уменьшить запрос избыточных записей. Выполнение связанного запроса на уровне приложения означает, что приложению нужно запросить определенную запись только один раз, в то время как выполнение связанного запроса в базе данных может потребовать

Повторный доступ к части данных. С этой точки зрения, такой рефакторинг также может уменьшить сбои сети и памяти.

Идя дальше, это эквивалентно реализации хэш-ассоциаций в приложении вместо использования ассоциаций вложенных циклов MySQL. В некоторых сценариях ассоциации хэшей намного эффективнее.

Когда приложение может удобно кэшировать результаты одного запроса

Когда данные могут быть распределены по разным серверам MySQL

Когда метод IN() можно использовать вместо связанного запроса

Существует множество одновременных сценариев и частых запросов к БД, требующих подбазы данных и подтаблицы.

1. Давление бизнеса, которое несет DB, велико, и бремя может быть уменьшено, если его можно уменьшить. Когда таблица находится на уровне миллионов, объединение приводит к снижению производительности;

2. Распределенная подбаза данных и подтаблица. В настоящее время не рекомендуется объединяться между библиотеками. В настоящее время распределенное промежуточное программное обеспечение mysql имеет низкую производительность соединения между базами данных.

3. Измените схему таблицы. Легче изменить запрос к одной таблице. Оператор SQL, написанный соединением, необходимо изменить, что нелегко найти, и стоимость относительно высока. Когда система относительно большой, трудно поддерживать.

На бизнес-уровне после запроса данных из одной таблицы они используются в качестве условия для запроса следующей одиночной таблицы. То есть подзапрос. Меня беспокоит, что из подзапроса выходит слишком много наборов результатов. mysql не имеет ограничения на количество входов, но

mysql ограничивает размер всего оператора sql. Настроив параметр max_allowed_packet, можно изменить максимальное значение sql. Рекомендуется хорошо поработать в бизнесе, и допустимо ограничить набор результатов одним запросом.

Преимущества связанного запроса могут быть использованы для пейджинга.Вы можете использовать поля подтаблицы в качестве условий запроса.При запросе используйте поля, соответствующие подтаблице, как набор результатов, и используйте основную таблицу для его ввода. , но проблема в том, что если он совпадает Если объем данных слишком велик, он не будет работать, а также приведет к тому, что возвращаемые записи подкачки будут отличаться от фактических.Решение можно передать на фронт- конец, одноразовый запрос и внешний интерфейс могут отображаться в пакетном режиме.Предпосылка этого решения: объем данных не слишком велик, потому что длина самого sql ограничена.