本帖最后由 zmx198768 于 2010-04-20 15:41:02 编辑

解决方案 »

  1.   

    count(*)意味着,要不就扫描全表,要不就扫描全索引,都是耗时的事情。因为你没带任何条件。只能系统自己判断哪种扫描稍快一点了。
    相反,只根据index条件获取符合条件的记录,只需要通过索引快速定位记录,反而很快。道理就是这样子。
      

  2.   


    我耗时长的查询是根据主键查询的,而不是count(*)另外,这张表我没有任何索引
      

  3.   

    主键会自动创建索引的,所以这张表上MESSAGE_ID做为主键,MYSQL已经创建了这个字段的唯一索引。 SELECT Count(MESSAGE_ID) FROM blog_message  是全表/全索引遍历。 所以会花时间比较长。navicat中直接查询表信息的话一下子就可以统计出来总共有多少条记录了。
    这个是通过 information_schema.tables 中的记录得到的信息,并不一定准确,你可以直接 select * from  information_schema.tables  也会很快得到相关信息。
      

  4.   


    我现在想做的是查询blog_message这张表里面的记录总数,有没有简便的方法可以快速实现?
      

  5.   

    我现在想做的是查询blog_message这张表里面的记录总数,有没有简便的方法可以快速实现?一般而言,
    SELECT Count(MESSAGE_ID) FROM blog_message
    是简便的方法
      

  6.   


    有倒是有,不过,走的是旁道。针对 该表写两个触发器,insert, delete,
    每insert一次,在另一个表sum里头,加1,delete一次,减1
    这样,每次你直接从sum里头取值就完了。
      

  7.   

    另外建立了一个索引
    执行语句
    EXPLAIN SELECT count(message_id) FROM blog_message WHERE blog_id !='';
    耗时0.25S