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

MySQLに関するトップ10の興味深い事実とヒント

    MySQLは、これまでに1億回ダウンロードされた、最も急速に成長しているオープンソースのリレーショナルデータベース管理システムです。これは、Webアプリケーションで使用するデータベースの人気のある選択肢であり、現在、Facebook、Twitter、Wikipedia、Flickr、YouTubeなどの多くの大規模なWebサイトで使用されています。それでは、MySQLに関する興味深い事実とヒントのトップ10を見つけましょう。

    >

    MySQLに関する興味深い事実とヒント

    1. MySQLは、テーブルごとに最大64のインデックスをサポートします。各インデックスは、1〜16列で構成されます。最大インデックスサイズは1000バイトです(InnoDBの場合は767)。

    2.MySQLテーブルの行の最大サイズは65,535バイトです。また、符号付き整数の最大値は2,147,483,647であり、符号なし整数の値は4,294,967,295です。 CHARとVARCHARの両方を含む混合テーブルでは、MySQLはCHARをVARCHARに変更します。

    3. PRIMARY KEYまたはUNIQUEインデックスが、整数型の1つの列のみで構成されている場合は、SELECTステートメントでその列を「_rowid」と呼ぶこともできます。

    4. AUTO_INCREMENTの値を変更するには、「ALTER TABLE AUTO_INCREMENT=value;」を使用します。または「SETINSERT_ID=value;」

    5. MySQLがパブリックにアクセスされるのを制限するには、構成ファイルの「skip-networking」オプションを使用します。有効にすると、MySQLはローカルソケット接続のみをリッスンし、すべてのTCPポートを無視します。また、「bind-address」パラメータを「127.0.0.1」に設定すると、ローカルホストのみがMySQLにアクセスできるように制限されます。

    6. MySQLに多数の接続が確立されている場合(つまり、永続的な接続のないWebサイト)、thread_cache_sizeをゼロ以外の値に設定することでパフォーマンスを向上させることができます。 16から始めるのが良い値です。 thread_createdがあまり速く成長しなくなるまで、値を増やします。

    7. NO_AUTO_VALUE_ON_ZEROは、0の自動インクリメントを抑制します。NULLのみが次のシーケンス番号を生成します。このモードは、テーブルのAUTO_INCREMENT列に0が格納されている場合に役立ちます。 (ちなみに、0を格納することはお勧めできません。)

    8.構成オプション「innodb_analyze_is_persistent」、「innodb_stats_persistent_sample_pages」、および「innodb_stats_transient_sample_pages」により、InnoDBインデックス統計の精度が向上し、MySQLの再起動全体で一貫性が保たれます。 InnoDBは、インデックスの一部をサンプリングすることにより、オプティマイザーがクエリで使用するインデックスを決定するのに役立つ統計を事前計算します。 InnoDBが各インデックスに対して行うサンプリングの量を調整できます。結果の統計は、再起動や一部の実行時イベントのために再計算される(場合によっては変更される)のではなく、サーバーの再起動後も保持できるようになりました。より正確な統計はクエリのパフォーマンスを向上させることができ、永続性の側面はクエリのパフォーマンスを安定させることができます。永続的な統計機能が有効になっている場合、統計は、テーブルに対してANALYZETABLEを明示的に実行した場合にのみ再計算されます。

    9. InnoDBは、開いているテーブルに関連付けられているメモリを解放して、テーブルの数が膨大なシステムのメモリ負荷を軽減します。 LRUアルゴリズムは、アクセスされずに最も長く経過したテーブルを選択します。開いているテーブル用により多くのメモリを予約するには、–table_definition_cache =#構成オプションの値を増やします。

    10.テーブルを開いているテーブルと同時接続の数に一致するようにtable_cacheパラメーターを設定します。 open_tablesの値を監視し、それが急速に増加している場合は、「table_cache」のサイズを増やす必要があります。また、パラメータ「open_file_limit」に対して、この制限を20 + max_connections + table_cache*2に設定します。複雑なクエリがある場合は、「sort_buffer_size」と「tmp_table_size」が非常に重要になる可能性があります。値はクエリの複雑さと利用可能なリソースによって異なりますが、それぞれ4Mbと32Mbが開始点として推奨されます。

    注:これらは「接続ごと」の値です。したがって、これらのパラメータを設定するときは、負荷と使用可能なリソースを考慮してください。たとえば、sort_buffer_sizeは、MySQLがソートを実行する必要がある場合にのみ割り当てられます。メモリが不足しないように注意してください。


    1. SQLクエリデータをExcelにエクスポートする

    2. SQL ServerでRAND()を決定論的にする方法

    3. OFFSET/FETCHを使用したSQLServerでのページネーション

    4. PostgreSQL関数/ストアドプロシージャCURRENT_TIMESTAMPは変更されません