在这里,我一遍又一遍地在笔记本电脑上的dev DB上运行相同的命令;
mysql> select count(*) from tblTraceOutput; +----------+ | count(*) | +----------+ | 300175 | +----------+ 1 row in set (0.42 sec) mysql> select count(*) from tblTraceOutput; +----------+ | count(*) | +----------+ | 300175 | +----------+ 1 row in set (0.35 sec) mysql> select count(*) from tblTraceOutput; +----------+ | count(*) | +----------+ | 300175 | +----------+ 1 row in set (0.45 sec)
在这里,我做同样的事情,按下“ up”并再次运行最后一个命令,但是输出改变了。这里发生了什么?没有使用这个数据库,因为它是我本地笔记本电脑上的副本,可以自己修改。为什么表的表行计数发生变化tblTraceOutput?
tblTraceOutput
mysql> SELECT table_name, table_rows FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'smoketrace'; +----------------+------------+ | table_name | table_rows | +----------------+------------+ | tblCategories | 9 | | tblResults | 32463 | | tblRoutes | 300 | | tblSettings | 2 | | tblTraceOutput | 303463 | | tblTraces | 12 | +----------------+------------+ 6 rows in set (0.01 sec) mysql> SELECT table_name, table_rows FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'smoketrace'; +----------------+------------+ | table_name | table_rows | +----------------+------------+ | tblCategories | 9 | | tblResults | 32948 | | tblRoutes | 246 | | tblSettings | 2 | | tblTraceOutput | 297319 | | tblTraces | 12 | +----------------+------------+ 6 rows in set (0.00 sec) mysql> SELECT table_name, table_rows FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'smoketrace'; +----------------+------------+ | table_name | table_rows | +----------------+------------+ | tblCategories | 9 | | tblResults | 32948 | | tblRoutes | 451 | | tblSettings | 2 | | tblTraceOutput | 302127 | | tblTraces | 12 | +----------------+------------+ 6 rows in set (0.02 sec)
刷新页面时,我在phpMyAdmin中看到了此行为,因此我想在CLI上进行自我检查,正如您所看到的,它确实正在改变!
mysql --version ./bin/mysql Ver 14.14 Distrib 5.5.8, for Linux (i686) using EditLine wrapper free -m total used free shared buffers cached Mem: 1880 1830 49 0 51 600 -/+ buffers/cache: 1179 701 Swap: 1027 0 1026 uname -a Linux laptop 3.4.11 #1 SMP Sun Sep 23 15:03:21 BST 2012 i686 i686 i386 GNU/Linux
假设您使用的是InnoDB,根据MySQL INFORMATION_SCHEMA TABLES文档,这是5.5.x中的默认设置。
并注意:
如果表位于INFORMATION_SCHEMA数据库中,则TABLE_ROWS列为NULL。 对于InnoDB表,行数只是SQL优化中使用的粗略估计。(如果InnoDB表已分区,则也是如此。)
如果表位于INFORMATION_SCHEMA数据库中,则TABLE_ROWS列为NULL。
对于InnoDB表,行数只是SQL优化中使用的粗略估计。(如果InnoDB表已分区,则也是如此。)