Требует ли разделение MySQL специальных запросов для использования преимуществ после его создания?

#mysql #mariadb #database-partitioning #table-partitioning

#mysql #mariadb #разделение базы данных #разделение таблиц

Вопрос:

Я новичок, когда дело доходит до разделов MySQL / MariaDB, и еще не создал ни одного, но читаю об этом. Мой первый вопрос заключается в том, что если я разделяю таблицу по годам, а затем по месяцам на основе столбца dt_created DATETIME, нужно ли мне изменить способ выполнения SQL-запросов, чтобы начать видеть увеличение производительности при выполнении запроса на один день в dt_created? Или стандартный запрос, такой как:

 SELECT * FROM web_tracking_events where dt_created >= '(some time goes here)'
  

работает достаточно хорошо?

Комментарии:

1. Смотрите mysql.rjweb.org/doc.php/partitionmaint , если вы еще этого не сделали

2. Разделение по своей сути не дает никакого преимущества в производительности. (Существует небольшое количество исключений; ваш вариант использования не является одним из них.) Что касается вопроса заголовка — никаких изменений синтаксиса в запросах.

3. @RickJames Я понимаю, что вы признанный профессионал в этом. Итак, вы отговорили меня от разделения. Спасибо за вашу обширную информацию об этом в Интернете ! 🙂

Ответ №1:

В принципе. вы можете выполнить запрос типа:

 SELECT * FROM web_tracking_events where dt_created >= '(some time goes here)'
  

Это называется обрезкой. Смотрите https://dev.mysql.com/doc/refman/8.0/en/partitioning-pruning.html

Однако это означает, что mysql откроет все разделы, чтобы проверить, найдет ли он там соответствие.