この記事の内容は、mysql の大きなテーブルでの count() の使用法と、mysql での count() の最適化に関するものです。必要な方は参考にしていただければ幸いです。 。
1 つのテーブルには 6000w 以上のデータが含まれていますが、テーブルを最適化する前に、テーブル内にあるデータの量、製品 A の数、製品 B の数を個別にカウントする必要があります。構造は次のとおりです。内容を隠すために、対応するフィールドをぼかしています。これは通常の InnoDB テーブルであるため、そのカウント (*) は InnoDB によって表示される効率よりもはるかに遅くなります。あまり正確ではないので、ここで統計を作成する必要があります。
合計 61,500,000 のデータcount(*) には 1539.499 秒かかりました
count(1) には 907.581 秒かかりました
count(A) Index.
count(test6) 主キーをカウントします。
例外なく、テーブルが十分に最適化されていないため、上記のいずれも数千秒かかり、これは私たちにとって耐えられません。
以下の分析を開始しました
テーブル全体のカウント(*)は200秒以内に正常、100秒以内に良好、50秒以内に良好になることが予想されます。
まず、内部のtest6を抽出して、
合計 61,500,000 個のデータcount(1) には 8.710 秒かかります
count(test6) そのうちの 12.957 秒かかります。
52.0% 向上しました
。決定できるフィールドを最適な値に変更します。たとえば、varchar はより多くの char を使用します。varchar はストレージ領域のサイズを自動的に割り当てることができますが、.varchar は使用する必要があります。文字列の長さを記録するために 1 ~ 2 バイト余分に追加され、更新の操作時間が増加します。count(1)
的效率最高,比最慢count(pk)
datetime はタイムスタンプに変更され、後者は 1978 から 2038 の間です count(1) を使用してテストした場合の最速時間は次のとおりです。 168 秒。少し遅いですが、許容範囲です。
概要: テーブル内のフィールドを再設計し、その長さを最適化してください。盲目的に varchar を多用しないでください。代わりに count(1) を使用してください。 of count(*) Retrieve.
関連する推奨事項:
mysql での Infinitus 分類のコード実装 Mysql データベースの最適化方法の概要 (必読)以上がmysql の大きなテーブルでの count() の使用法と mysql での count() の最適化の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。