ホームページ  >  記事  >  データベース  >  mysql の大きなテーブルでの count() の使用法と mysql での count() の最適化

mysql の大きなテーブルでの count() の使用法と mysql での count() の最適化

不言
不言オリジナル
2018-08-22 09:35:203986ブラウズ

この記事の内容は、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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。