mysql SELECT FOUND_ROWS()とCOUNT(*)の使い方の違い

1997 ワード

mysqlでFOUND_ROWS()もCOUNT(*)も統計的に記録できますが、同じようになぜこのような関数が2つあるのか、SELECT FOUND_をご紹介しますROWS()とCOUNT(*)の使い方の違い
SELECT文では、戻り行数をLIMITで制限することがよくあります.LIMITがないとどのくらいのローが返されるかを知りたい場合がありますが、同じ文をもう一度実行したくない場合があります.では、SELECTクエリにSQL_を含めるCALC_FOUND_ROWSオプションを選択し、FOUND_を実行します.ROWS()でいいです.
mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name
      -> WHERE id > 100 LIMIT 10;
mysql> SELECT FOUND_ROWS();

COUNT(*)のわずかな違いは、NULL値が含まれているかどうかにかかわらず、検索ローの数を返すことです.
SELECTは、他の列を検索せずに1つのテーブルから検索し、WHERE句がない場合、COUNT(*)は最も速い戻り速度に最適化される.例:
mysql> SELECT COUNT(*) FROM tablename;

この最適化はMyISAMテーブルにのみ適用されます.なぜなら、これらのテーブルタイプは、関数がレコードの正確な数を返し、アクセスしやすいためです.トランザクション型のストレージエンジン(InnoDB,BBB)では、複数の処理が発生し、それぞれが行数に影響を及ぼす可能性があるため、正確な行数を格納する問題が多い.
COUNT(DISTINCT expr,[expr...])
異なるNULL以外の値の数を返します.
一致する項目が見つからない場合、COUNT(DISTINCT)は0を返します.

しかしmysqlで関数found_を持参しますrows();
総数をすばやく求めることもできます

この方法の使用時に注意すべき問題
参照:
1 select sql_でなければなりませんcalc_found_rows先頭
2このときfound_rows()がlimiteがない場合の行数
以下にプレゼンテーションを行いますので、皆さんにもっと理解してもらいたいです.
mysql> select count(*) from zd_sort2;
+----------+
| count(*) |
+----------+
|       20 |
+----------+
1 row in set (0.14 sec)
 
mysql> select sql_calc_found_rows st2_id  from zd_sort2 limit 3;
+--------+
| st2_id |
+--------+
|      1 |   
|      6 |      
|     12 |        
+--------+
3 rows in set (0.00 sec)
 
mysql> select found_rows();
+--------------+
| found_rows() |
+--------------+
|           20 |
+--------------+
1 row in set (0.00 sec)
 
mysql>

二つの方法の効率はどうですか.