sql >> データベース >  >> RDS >> Mysql

ANALYZE TABLE `myTable`を手動で実行しない限り、MySQLはinformation_schemaを更新しません

    Q: MySQLがinformation_schemaを自動的に更新しないのはなぜですか?また、この動作を修正するにはどうすればよいですか?

    A: InnoDBはauto_increment値をメモリに保持し、それをディスクに保持しません。

    メタデータクエリの動作(例:SHOW TABLE STATUSinnodb_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にスリップする可能性があります 収集統計から取得する値は、取得するまでに「古くなっている」可能性があります。



    1. スキーマとビューを使用してPostgreSQLユーザーアクセスを制限する

    2. C#プログラム内でストアドプロシージャを実行する方法

    3. T-SQLの場合と同じように、PL / SQLで変数を宣言して使用するにはどうすればよいですか?

    4. RMySQLシステムエラー:10060