動的サンプリング

show parameter OPTIMIZER_DYNAMIC_SAMPLING

alter session set OPTIMIZER_DYNAMIC_SAMPLING = 4;

 

14.13.16.2 非永続的オプティマイザ統計のパラメータの構成
https://dev.mysql.com/doc/refman/5.6/ja/innodb-statistics-estimation.html


show variables like 'innodb_stats%';
set GLOBAL innodb_stats_persistent = off;

 

※永続的オプティマイザ統計の場合も統計情報がない場合は実行時に動的統計を取得している模様

統計情報がない場合、おおよその件数程度は動的に取得している模様。

https://blog.engineer-memo.com/2012/04/28/%E7%B5%B1%E8%A8%88%E6%83%85%E5%A0%B1%E3%81%AE%E8%87%AA%E5%8B%95%E6%9B%B4%E6%96%B0%E3%81%AB%E9%96%A2%E3%81%99%E3%82%8B%E8%80%83%E5%AF%9F/

https://docs.microsoft.com/ja-jp/sql/t-sql/statements/alter-database-transact-sql-set-options?view=sql-server-ver15#auto_update_statistics_async

USE [master]
GO
ALTER DATABASE [test] SET AUTO_UPDATE_STATISTICS_ASYNC OFF WITH NO_WAIT
GO

統計情報がある場合も、クエリがコンパイルされる場合は、動的サンプリングを実施している模様。

AUTO_UPDATE_STATISTICS_ASYNC が ON の場合、非同期
AUTO_UPDATE_STATISTICS_ASYNC が OFF の場合、クエリコンパイル

 

※AUTO_UPDATE_STATISTICS_ASYNCをONに設定する場合、AUTO_UPDATE_STATISTICS もONに設定する必要がある

デフォルトは以下のとおり
AUTO_UPDATE_STATISTICS       -> ON
AUTO_UPDATE_STATISTICS_ASYNC -> OFF

OPTION (RECOMPILE)で強制コンパイル可能