MySQL count(*)空表为何会很慢
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL count(*)空表为何会很慢,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2453字,纯文字阅读大概需要4分钟。
内容图文
![MySQL count(*)空表为何会很慢](/upload/InfoBanner/zyjiaocheng/456/b97bcea6aef845d6b274c36bdf5d1ec6.jpg)
见下例:
dba@localhost : test 18:14:32> show create table test_hmw\G *************************** 1. row *************************** Table: test_hmw Create Table: CREATE TABLE `test_hmw` ( `mail` varchar(1024)DEFAULT NULL, `user_id` bigint(20)DEFAULT NULL, `id` int(10) unsigned NOTNULL AUTO_INCREMENT, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3997636 DEFAULT CHARSET=utf8 1 row in set (0.00 sec) dba@localhost : test 18:14:45> select count(*) from test_hmw; +----------+ | count(*) | +----------+ | 3813472 | +----------+ 1 row in set (0.69 sec) dba@localhost : test 18:14:56> show status like ‘%last_query%‘; +-----------------+---------------+ | Variable_name |Value | +-----------------+---------------+ | Last_query_cost | 776677.599000 | +-----------------+---------------+ 1 row in set (0.00 sec) dba@localhost : test 18:15:14> delete from test_hmw; Query OK, 3813472 rows affected (15.11 sec) dba@localhost : test 18:15:56> select count(*) fromtest_hmw; +----------+ | count(*) | +----------+ | 0 | +----------+ 1 row in set (0.31 sec) dba@localhost : test 18:15:59> show status like ‘%last_query%‘; +-----------------+---------------+ | Variable_name |Value | +-----------------+---------------+ | Last_query_cost | 757879.799000 | +-----------------+---------------+ 1 row in set (0.00 sec)
我们发现count一个空表的cost和删除前是一样的(时间不一样是因为缓存);其实在Oracle里也存在这个现象,对于select xx from table where rownum<xxx或者select count(*)之类的操作是从起始的block扫描到HMW;而在MySQL里不是HMW,MySQL的多版本是直接存储在表里的,因此MySQL在删除了大量的数据,而purge thread回收前进行上面的操作就会扫描大量的“空”page,因此也就有了这种现象;
既然知道原因在MySQL可以通过重整表的方式再来看看cost:
dba@localhost : test 18:16:01> optimize table test_hmw; 2 rows in set (1.85 sec) dba@localhost : test 18:16:14> select count(*) fromtest_hmw; +----------+ | count(*) | +----------+ | 0 | +----------+ 1 row in set (0.00 sec) dba@localhost : test 18:16:16> show status like ‘%last_query%‘; +-----------------+----------+ | Variable_name |Value | +-----------------+----------+ | Last_query_cost | 1.199000 | +-----------------+----------+ 1 row in set (0.00 sec)
MySQL count(*)空表为何会很慢
标签:
本文系统来源:http://my.oschina.net/HeAlvin/blog/497707
内容总结
以上是互联网集市为您收集整理的MySQL count(*)空表为何会很慢全部内容,希望文章能够帮你解决MySQL count(*)空表为何会很慢所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。