MySQL OSC是MySQL 8.0版本中引入的一種優(yōu)化器統(tǒng)計收集工具,它可以通過收集統(tǒng)計信息來優(yōu)化查詢的執(zhí)行效率,提高MySQL數(shù)據(jù)庫的性能。
mysql>SET PERSIST optimizer_switch='osctrace=on';
使用以上命令可以把MySQL的OSC功能打開。OSC的工作方式是先收集表的統(tǒng)計信息,然后使用這些統(tǒng)計信息來優(yōu)化執(zhí)行計劃。在收集統(tǒng)計信息時,它會掃描整張表并計算不同列的值分布情況,然后存儲到系統(tǒng)表中。為了避免給MySQL造成太多的負(fù)擔(dān),在創(chuàng)建索引的過程中也會收集統(tǒng)計信息。
OSC的使用對于查詢效率的提升是非常明顯的。它可以降低查詢的IO操作和CPU消耗,使查詢的響應(yīng)時間更加快速。但是,使用OSC也會對MySQL系統(tǒng)本身帶來一些負(fù)面影響,比如會增加系統(tǒng)表的大小,會占用額外的存儲空間,會使MySQL的啟動時間也稍微變長。
mysql>SELECT * FROM performance_schema.optimizer_trace;
以上命令可以查看MySQL在查詢執(zhí)行時的優(yōu)化器統(tǒng)計信息。通過optimizer_trace系統(tǒng)表的數(shù)據(jù),我們可以了解MySQL在執(zhí)行查詢時,是如何選擇執(zhí)行計劃的,這樣有助于我們更好地優(yōu)化MySQL的性能。