ANALYZE в MySQL — 100 жизненных приёмов (статистика и гистограммы)

100 практических кейсов MySQL ANALYZE: обновление статистики, PARTITION, LOCAL/NO_WRITE_TO_BINLOG, UPDATE/DROP HISTOGRAM.

🟢 ANALYZE в MySQL. Введение

ANALYZE в MySQL (команда ANALYZE TABLE) обновляет статистику таблиц и индексов, которую оптимизатор использует для выбора плана выполнения. В MySQL 8.0 также можно управлять гистограммами селективности столбцов через UPDATE HISTOGRAM и DROP HISTOGRAM. Команда поддерживает анализ конкретных партиций и вариант NO_WRITE_TO_BINLOG/LOCAL для реплик.

Ниже — синтаксис и 100 уникальных примеров из разных доменов (OLTP, аналитика, e‑commerce, IoT, логи, партиции, репликация).

Синтаксис

ANALYZE TABLE tbl;
ANALYZE NO_WRITE_TO_BINLOG TABLE tbl;  -- синоним: ANALYZE LOCAL TABLE
ANALYZE TABLE tbl PARTITION (p2025_08, p2025_09);
ANALYZE TABLE tbl UPDATE HISTOGRAM ON col1, col2 WITH 64 BUCKETS;
ANALYZE TABLE tbl DROP HISTOGRAM ON col1, col2;

Типовая конструкция

ANALYZE TABLE orders;
ANALYZE TABLE orders UPDATE HISTOGRAM ON status, country WITH 32 BUCKETS;

100 примеров

1. Анализ таблицы orders для актуализации статистики

ANALYZE TABLE orders;

2. Анализ таблицы order_items для актуализации статистики

ANALYZE TABLE order_items;

3. Анализ таблицы users для актуализации статистики

ANALYZE TABLE users;

4. Анализ таблицы profiles для актуализации статистики

ANALYZE TABLE profiles;

5. Анализ таблицы products для актуализации статистики

ANALYZE TABLE products;

6. Анализ таблицы categories для актуализации статистики

ANALYZE TABLE categories;

7. Анализ таблицы payments для актуализации статистики

ANALYZE TABLE payments;

8. Анализ таблицы invoices для актуализации статистики

ANALYZE TABLE invoices;

9. Анализ таблицы refunds для актуализации статистики

ANALYZE TABLE refunds;

10. Анализ таблицы coupons для актуализации статистики

ANALYZE TABLE coupons;

11. Анализ таблицы logs для актуализации статистики

ANALYZE TABLE logs;

12. Анализ таблицы audit для актуализации статистики

ANALYZE TABLE audit;

13. Анализ таблицы sessions для актуализации статистики

ANALYZE TABLE sessions;

14. Анализ таблицы carts для актуализации статистики

ANALYZE TABLE carts;

15. Анализ таблицы cart_items для актуализации статистики

ANALYZE TABLE cart_items;

16. Анализ таблицы events для актуализации статистики

ANALYZE TABLE events;

17. Анализ таблицы notifications для актуализации статистики

ANALYZE TABLE notifications;

18. Анализ таблицы messages для актуализации статистики

ANALYZE TABLE messages;

19. Анализ таблицы comments для актуализации статистики

ANALYZE TABLE comments;

20. Анализ таблицы attachments для актуализации статистики

ANALYZE TABLE attachments;

21. Анализ таблицы warehouses для актуализации статистики

ANALYZE TABLE warehouses;

22. Анализ таблицы stock для актуализации статистики

ANALYZE TABLE stock;

23. Анализ таблицы deliveries для актуализации статистики

ANALYZE TABLE deliveries;

24. Анализ таблицы returns для актуализации статистики

ANALYZE TABLE returns;

25. Анализ таблицы tickets для актуализации статистики

ANALYZE TABLE tickets;

26. Анализ таблицы chats для актуализации статистики

ANALYZE TABLE chats;

27. Анализ таблицы reviews для актуализации статистики

ANALYZE TABLE reviews;

28. Анализ таблицы ratings для актуализации статистики

ANALYZE TABLE ratings;

29. Анализ таблицы subscriptions для актуализации статистики

ANALYZE TABLE subscriptions;

30. Анализ таблицы licenses для актуализации статистики

ANALYZE TABLE licenses;

Ещё примеры

31. Анализ партиций августа и сентября в sales

ANALYZE TABLE sales PARTITION (p2025_08, p2025_09);

32. Анализ свежей партиции событий

ANALYZE TABLE events PARTITION (p_current);

33. Анализ партиций по регионам

ANALYZE TABLE geo_data PARTITION (eu, us, apac);

34. Анализ недельных партиций логов

ANALYZE TABLE logs PARTITION (w2025_35, w2025_36, w2025_37);

35. Анализ архивных партиций заказов

ANALYZE TABLE orders PARTITION (p2024, p2023);

36. Анализ партиций мониторинга

ANALYZE TABLE metrics PARTITION (m2025_08, m2025_09);

37. Анализ партиций склада

ANALYZE TABLE stock PARTITION (wh_a, wh_b);

38. Анализ партиций трекинга устройств

ANALYZE TABLE device_track PARTITION (d2025_09_01, d2025_09_02);

39. Анализ партиций платежей по валютам

ANALYZE TABLE payments PARTITION (usd, eur, gbp);

40. Анализ партиций посещаемости по дням

ANALYZE TABLE visits PARTITION (day_2025_09_15, day_2025_09_16);

41. Анализ партиций ретеншна

ANALYZE TABLE retention PARTITION (cohort_2025_07, cohort_2025_08);

42. Анализ партиций очереди задач

ANALYZE TABLE queue PARTITION (prio_high, prio_low);

43. Анализ партиций ошибок IoT

ANALYZE TABLE iot_errors PARTITION (sensor_a, sensor_b, sensor_c);

44. Анализ партиций подписок по планам

ANALYZE TABLE subscriptions PARTITION (basic, pro, enterprise);

45. Анализ партиций контента по языкам

ANALYZE TABLE posts PARTITION (ru, en, de);

Ещё примеры

46. Гистограммы по статусу и стране в orders

ANALYZE TABLE orders UPDATE HISTOGRAM ON status, country WITH 64 BUCKETS;

47. Удалить гистограммы по status в orders

ANALYZE TABLE orders DROP HISTOGRAM ON status;

48. Гистограмма по цене в products (256 бакетов)

ANALYZE TABLE products UPDATE HISTOGRAM ON price WITH 256 BUCKETS;

49. Гистограммы для категорий и брендов

ANALYZE TABLE products UPDATE HISTOGRAM ON category_id, brand_id WITH 32 BUCKETS;

50. Удалить гистограммы по brand_id

ANALYZE TABLE products DROP HISTOGRAM ON brand_id;

51. Гистограмма по discount в coupons

ANALYZE TABLE coupons UPDATE HISTOGRAM ON discount WITH 64 BUCKETS;

52. Гистограмма по размеру корзины

ANALYZE TABLE carts UPDATE HISTOGRAM ON items_count WITH 32 BUCKETS;

53. Гистограмма по сумме платежей

ANALYZE TABLE payments UPDATE HISTOGRAM ON amount WITH 128 BUCKETS;

54. Удаление гистограмм по amount

ANALYZE TABLE payments DROP HISTOGRAM ON amount;

55. Гистограммы по каналам и кампаниям

ANALYZE TABLE marketing UPDATE HISTOGRAM ON channel, campaign WITH 64 BUCKETS;

56. Гистограмма по времени ответа API

ANALYZE TABLE api_metrics UPDATE HISTOGRAM ON latency_ms WITH 128 BUCKETS;

57. Гистограмма по размеру файла в uploads

ANALYZE TABLE uploads UPDATE HISTOGRAM ON size_bytes WITH 256 BUCKETS;

58. Удаление гистограмм по size_bytes

ANALYZE TABLE uploads DROP HISTOGRAM ON size_bytes;

59. Гистограмма по возрасту пользователей

ANALYZE TABLE users UPDATE HISTOGRAM ON age WITH 64 BUCKETS;

60. Гистограмма по количеству позиций в заказах

ANALYZE TABLE order_items UPDATE HISTOGRAM ON qty WITH 64 BUCKETS;

61. Гистограмма по дням доставки

ANALYZE TABLE deliveries UPDATE HISTOGRAM ON days_to_deliver WITH 32 BUCKETS;

62. Гистограмма по оценке отзывов

ANALYZE TABLE reviews UPDATE HISTOGRAM ON rating WITH 16 BUCKETS;

63. Гистограмма по размеру сообщения в чатах

ANALYZE TABLE chat_msgs UPDATE HISTOGRAM ON text_len WITH 64 BUCKETS;

64. Гистограммы по активности в сессиях

ANALYZE TABLE sessions UPDATE HISTOGRAM ON pages, duration_sec WITH 64 BUCKETS;

65. Удаление гистограмм по duration_sec

ANALYZE TABLE sessions DROP HISTOGRAM ON duration_sec;

Ещё примеры

66. ANALYZE на реплике без записи в binlog (orders)

ANALYZE NO_WRITE_TO_BINLOG TABLE orders;

67. ANALYZE LOCAL для products

ANALYZE LOCAL TABLE products;

68. ANALYZE LOCAL для крупной таблицы logs

ANALYZE LOCAL TABLE logs;

69. ANALYZE LOCAL для статей

ANALYZE LOCAL TABLE posts;

70. ANALYZE LOCAL для витрины mart_daily

ANALYZE LOCAL TABLE mart_daily;

71. ANALYZE LOCAL для geo_points

ANALYZE LOCAL TABLE geo_points;

72. ANALYZE LOCAL для очереди задач

ANALYZE LOCAL TABLE queue;

73. ANALYZE LOCAL для сессий

ANALYZE LOCAL TABLE sessions;

74. ANALYZE LOCAL для событий

ANALYZE LOCAL TABLE events;

75. ANALYZE LOCAL для кеша

ANALYZE LOCAL TABLE cache;

76. ANALYZE LOCAL для инвойсов

ANALYZE LOCAL TABLE invoices;

77. ANALYZE LOCAL для платежей

ANALYZE LOCAL TABLE payments;

78. ANALYZE LOCAL для профилей

ANALYZE LOCAL TABLE profiles;

79. ANALYZE LOCAL для чатов

ANALYZE LOCAL TABLE chats;

80. ANALYZE LOCAL для тикетов

ANALYZE LOCAL TABLE tickets;

Ещё примеры

81. Пакетный анализ нескольких таблиц (админ-скрипт)

ANALYZE TABLE users, orders, payments, products;

82. ANALYZE в расписании EVENT (еженедельно)

CREATE EVENT ev_weekly_analyze ON SCHEDULE EVERY 1 WEEK DO
  ANALYZE TABLE orders, order_items;

83. ANALYZE в EVENT для логов (ежедневно)

CREATE EVENT ev_daily_logs_analyze ON SCHEDULE EVERY 1 DAY DO
  ANALYZE TABLE logs;

84. ANALYZE после массовой загрузки (процедура)

CREATE PROCEDURE after_bulk_load()
BEGIN
  ANALYZE TABLE stage_users;
  ANALYZE TABLE users;
END;

85. ANALYZE партиций в EVENT с параметрами

CREATE EVENT ev_monthly_sales_analyze ON SCHEDULE EVERY 1 MONTH DO
  ANALYZE TABLE sales PARTITION (p_current);

86. ANALYZE в миграции после ALTER

ALTER TABLE products ADD INDEX ix_price (price);
ANALYZE TABLE products;

87. Автоматический ANALYZE витрины

CREATE EVENT ev_mart_analyze ON SCHEDULE EVERY 12 HOUR DO
  ANALYZE TABLE mart_daily;

88. ANALYZE после импорта CSV

LOAD DATA INFILE '/import/products.csv' INTO TABLE products FIELDS TERMINATED BY ',';
ANALYZE TABLE products;

89. ANALYZE геоданных после массовой вставки

INSERT INTO geo_points(geom) VALUES (ST_GeomFromText('POINT(0 0)'));
ANALYZE TABLE geo_points;

90. ANALYZE очереди после purge

DELETE FROM queue WHERE finished=1 AND finished_at<CURDATE()-INTERVAL 7 DAY;
ANALYZE TABLE queue;

Ещё примеры

91. ANALYZE таблицы конфигураций с JSON

ANALYZE TABLE cfg;

92. ANALYZE витрины отчётности

ANALYZE TABLE mart_orders;

93. ANALYZE агрегатов по дням

ANALYZE TABLE agg_daily;

94. ANALYZE реестра миграций

ANALYZE TABLE migrations;

95. ANALYZE витрины активных клиентов

ANALYZE TABLE v_active_customers;

96. ANALYZE очереди восстановления

ANALYZE TABLE recovery_queue;

97. ANALYZE истории логинов

ANALYZE TABLE logins;

98. ANALYZE архива заказов

ANALYZE TABLE orders_archive;

99. ANALYZE таблицы аудита

ANALYZE TABLE audit;

100. ANALYZE справочника валют

ANALYZE TABLE currencies;

Заключение

ANALYZE помогает оптимизатору точнее оценивать селективность и стоимость планов. Регулярно выполняйте его на активно меняющихся таблицах (особенно после массовых загрузок/удалений), а для MySQL 8.0 используйте гистограммы для неселективных индексов и колонок с неравномерным распределением.

Подробнее — в официальной документации MySQL.


 

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