phpMyAdmin - 行列中的代字号(〜)是什么意思?

时间:2011-11-15 14:49:45

标签: php mysql phpmyadmin

我最近升级了Joomla!使用大型文章数据从1.5安装到1.7,升级方法是升级数据库(基本上将内容插入另一个表)我注意到列值以波浪号为前缀(〜 ):

See image

现在,乍一看我认为这意味着该值是近似的,因为当我刷新页面时,我看到一个不同的值,有时更高,有时更低。好吧,让我们说这个值是近似的,在这种情况下,是什么导致了这个?一些注意事项:

  • 操作系统:Windows 7。
  • 服务器:Apache 2,PHP 5.3和MySQL 5.1.50社区。

3 个答案:

答案 0 :(得分:11)

行计数是InnoDB用于查询优化的近似值。执行计数(*)效率要低得多,并且大致了解行数足以优化查询计划。 phpMyAdmin将执行“show table status”查询以获取有关表的信息:

http://dev.mysql.com/doc/refman/5.0/en/show-table-status.html

  

对于其他存储引擎,例如InnoDB,此值为   近似值,可能会从实际值变化多达40到   50%。在这种情况下,请使用SELECT COUNT(*)来获得准确的计数。

答案 1 :(得分:7)

根据MySQL Manual on InnoDB restrictions

  • SHOW TABLE STATUS无法提供InnoDB表的准确统计信息,但表格保留的物理大小除外。行计数只是SQL优化中使用的粗略估计。

  • InnoDB不保留表中的内部行数,因为并发事务可能同时“看到”不同数量的行。要处理SELECT COUNT(*) FROM t语句,InnoDB必须扫描表的索引,如果索引不完全在缓冲池中,则需要一些时间。如果您的表不经常更改,使用MySQL查询缓存是一个很好的解决方案。要快速计数,您必须使用自己创建的计数器表,并让应用程序根据插入和删除更新它。如果近似行数足够,则可以使用SHOW TABLE STATUS。请参见第13.2.13.1节“InnoDB Performance Tuning Tips”。

根据SHOW TABLE STATUS的{​​{3}},显示的InnoDB行数可能与实际数量相差最多50%。

答案 2 :(得分:1)

表格类型是什么? MyISAM表在其元数据中存储精确的行数。 InnoDB表不能,因为确切的行数取决于“在飞行中”的交易,因此显示的计数被标记为估计(〜=“近似”)而不是“它正是这么多”