MySQL最適化のまとめ-全体の数を調べる

1649 ワード

1、COUNT(*)とCOUNT(COL)
COUNT(*)は主にキーを索引スキャンしますが、COUNT(COL)は必ずしもそうではありません。また前者は統計表の中のすべての該当する記録の総数です。後者は計算表の中のすべての該当するCOLの記録の数です。まだ違いがあります。
最適化のまとめは、MyISAM表にとって:
1.どのような状況でもSELECT COUNT(*)FROM tableanameが最適です。
2.SELECT COUNT(*)FROMtableaname WHERE COL='value'という検索をできるだけ減らす。
3.SELECT COUNT(COL)FROM tableaname WHERE COL 2='value'の出現を根絶します。
2、COUNT(*)それともCOUNT(id)ですか?
私の理解では、COUNT(id)を使ったほうが速いと思います。私のidが自己増加のメインキーであれば、計算の数は明らかにすべてのフィールドの数を計算するより消費するリソースが少ないです。しかし、私は同じような指導のmysql調査の加速した文章の中で見ただけではなく、SELECT COUNT(*)を使って直接的なCOUNTのメインキーではないと提案しています。これはなぜですか?
マイISAMエンジンの表に総本数が格納されているため、WHEREやWHERE恒が真でないと(例えばWHERE 1)、COUNT(*)はそのまま総条数に戻ることができます。
また、COUNT(*)は「すべてのフィールドを計算する」のではなく、明らかにMySQLは*を「一つのデータ」という意味に解析することができます。
テストデータを簡単に比較して、もっと深いテストをしていません。

#0.817-         
select count(*) from student ;
#0.789-         
select count(id) from student;
#1.011-         
select count(name) from student;
#1.162-         
SELECT COUNT(*) FROM student WHERE namelike '%xiaoli%';#         ,    like       
締め括りをつける
総じて言えば、COUNT(id)を使うのはまだ早いです。ここで作った簡単な比較は参考にしてください。
以上はMySQL最適化のまとめについてです。全体の項目を調べて、皆さんに役に立ちたいです。関心のある友達は、MySQL最適化は、サブクエリの代わりに接続(join)を使用します。MYSQLサブクエリとネストクエリの最適化例解析mysql in語の文は効率の遅い最適化の技巧の例を調べます。などを参照してください。足りないところがあれば、コメントを歓迎します。友達のサポートに感謝します。