Q: MySQLがinformation_schemaを自動的に更新しないのはなぜですか?また、この動作を修正するにはどうすればよいですか?
A: InnoDBはauto_increment値をメモリに保持し、それをディスクに保持しません。
メタデータクエリの動作(例:SHOW TABLE STATUS
)innodb_stats_on_metadata
の設定に影響されます およびinnodb_stats_persistent
変数。
https://dev.mysql.com/doc /refman/8.0/en/innodb-parameters.html#sysvar_innodb_stats_on_metadata
メタデータをクエリするたびにANALYZEを強制すると、パフォーマンスが低下する可能性があります。
これらの変数の設定、またはANALYZE TABLE
を手動で実行して統計を強制的に収集する以外 、この問題の「修正」はないと思います。
(これは主に、修正が必要な問題ではないと思うからだと思います。)
テーブル内のauto_increment列の最大値を取得するための標準的なパターンは、次のとおりです。
SELECT MAX(`ai_col`) FROM `myschema`.`mytable`
私を困惑させるのは、なぜこの特定の情報を取得する必要があるのかということです。何に使うの?
確かに、これをアプリケーションコードで使用して、挿入したばかりの行に割り当てられた値を判別することはしません。最高値が他のセッションによって挿入された行からのものではないという保証はありません。そして、LAST_INSERT_ID()
があります セッションが挿入したばかりの行の値を取得するメカニズム。
ANALYZE TABLE
を使用する場合 統計を更新するために、それと後続のSELECT
の間にまだ少し時間があります ...別のセッションが別のINSERT
にスリップする可能性があります 収集統計から取得する値は、取得するまでに「古くなっている」可能性があります。