root:optimizetest>EXPLAIN select COUNT(name1) from demo1\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: demo1
         type: index
possible_keys: NULL
          key: PRIMARY
      key_len: 4
          ref: NULL
         rows: 2983
        Extra: Using index
1 row in set (0.00 sec)root:optimizetest>select COUNT(name1) from demo1;
+--------------+
| COUNT(name1) |
+--------------+
|         3147 |
+--------------+
1 row in set (0.00 sec)root:optimizetest>看第一个explain select 里面只扫描了2983行数据.
但是我的count(name1) 里面为什么可以查到3147条语句呢?
请问这多的100多条记录是怎么来的?

解决方案 »

  1.   

    这个只不过是MYSQL根据索引中的统计估计信息来做出的判断,并不准确。你可以用analyze table demo1 后再测试一下。
      

  2.   


    那么说 rows: 2983 没有实际意义?··
      

  3.   

     不清楚你的实际意义是指什么? 只能说这个并不代表实际在查询中产生的行数。只是MYSQL预告估计的行数以供MYSQL自己优化执行计划使用。
      

  4.   

    这个是MYSQL的估算,“估算”的意思就是可能准确,也可能不准确。MYSQL会根据这个估算值去选择优化策略。并不能代表实际记录条数。