今天同学们在群里讨论oracle的count(*)与count(1)的问题,正好提到mysql的情况。我突然想到自己遇到的问题:在myisam引擎执行count(*)速度非常快,而且执行速度与记录条数无关,而innodb却不是这样,记录越多,速度越慢。

于是做了一个实验,在一个有8000W条记录的innodb表执行了一下 select count(*) from table 。 果然一直等待,大概8分多后出来结果。马上再次执行相同的语句,用时大约22秒。马上执行第三次,还是约22秒。

于是我猜想innodb没有把记录数保存起来,而是做了实时统计,所以导致速度比较慢。第二次、第三次相对较快是因为高速缓存的原因。于是打电话咨询DBA同学。经过DBA同学的专业解答,我明白了:我猜对了,呵呵。所以,以后要注意在innodb中count(*)的问题,尽量避免吧……除非能确保该表始终保持很少的记录数。

另外,在网上查了一些资料:

引用

InnoDB Pitfalls 
However, all is not rosy with InnoDB. Because of its transactional nature, it has bottlenecks of its own. On MyISAM, doing a query that does SELECT COUNT(*) FROM {some_table}, is very fast, since MyISAM keeps the information in the index.

On InnoDB, this info is not stored in an index, and even the index and the data are kept in the same file. So, doing the same query on a table can incur a significant performance penalty.

To check what overhead this has, I wrote a simple test benchmark code. I duplicated a client node table that has 20,243 rows from MyISAM to InnoDB.

On a quiescent AMD 64 machine with MySQL server 5.0.24, doing a SELECT COUNT(*) FROM node takes 0.835 milliseconds on MyISAM, while on InnoDB it takes 12.292 milliseconds!

记录一下,innodb引擎的count(*)问题。

来源:https://blog.csdn.net/gsls181711/article/details/46784655

InnoDB与MyISAM中的count(*)的执行效率比较相关推荐

  1. 【PHP面试题】请简述项目中优化SQL语句执行效率的方法,从哪些方面,SQL语句如何分析?

    文章目录 一.考点 1.查找分析查询速度慢的原因 1)分析SQL查询慢的方法 2)使用 show profile 3)使用 show status 4)使用 show processlist 5)使用 ...

  2. 将m文件通过matlab 的编译器转换为可执行文件,【转】 Matlab中提高m文件执行效率的小技巧...

    在使用数组或矩阵之前先定义维数 MATLAB中的变量在使用之前不需要明确地定义和指定维数.但当未预定义数组或矩阵的维数时,当需赋值的元素下标超出现有的维数时,MATLAB 就为该数组或矩阵扩维一次,这 ...

  3. 在MySQL的InnoDB存储引擎中count(*)函数的优化

    转载自  在MySQL的InnoDB存储引擎中count(*)函数的优化 写这篇文章之前已经看过了很多数据库方面的优化内容,大部分都是加索引.使用事务.要什么select什么等等.然而,只是停留在阅读 ...

  4. 提高SQL执行效率的16种方法

    项目中优化sql语句执行效率的方法: 1)尽量选择较小的列 2)将where中用的比较频繁的字段建立索引 3)select子句中避免使用'*' 4)避免在索引列上使用计算.not in 和<&g ...

  5. 如何测试sql服务器的性能测试,SQL执行效率和性能测试方法

    对于做管理系统和分析系统的程序员,复杂SQL语句是不可避免的,面对海量数据,有时候经过优化的某一条语句,可以提高执行效率和整体运行性能.如何选择SQL语句,本文提供了两种方法,分别对多条SQL进行量化 ...

  6. Mysql 存储引擎中InnoDB与Myisam的主要区别

    一直以为我spring事物没有配置好,结果发现是mysql的表本身设置成了Myisam 引擎.改成innodb就支持事物了. 1, 事务处理 innodb 支持事务功能,myisam 不支持. Myi ...

  7. mysql存储引擎中INNODB和MyISAM的区别

    切记:存储引擎是基于表的,而不是数据库. 存储引擎概念: MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不 ...

  8. Mysql存储引擎中InnoDB与Myisam的区别

    为什么80%的码农都做不了架构师?>>>    1. 事务处理 innodb 支持事务功能,myisam 不支持. Myisam 的执行速度更快,性能更好. 2. select ,u ...

  9. MySQL 中 MyISAM 中的查询为什么比 InnoDB 快?

    MySQL 中 MyISAM 中的查询为什么比 InnoDB 快? 关于,这个问题,我网上看了很多答案.大多内容都雷同,但是我要强调的是,并不是说 MYISAM 一定比 InnoDB 的 select ...

最新文章

  1. Linux系统性能分析: CPU
  2. 优秀博士生与普通博士生差距能有多大?
  3. NeHe OpenGL第二十八课:贝塞尔曲面
  4. [C# 网络编程系列]专题四:自定义Web浏览器
  5. 皮一皮:绿灯侠是怎么诞生的...
  6. c++:opencv读图后mat矩阵的基本操作
  7. macOS 环境安装Flutter
  8. java获取系统属性_Java获取系统属性
  9. 团队第五次 # scrum meeting
  10. kali 2019-4中文乱码解决方法
  11. 模拟微信发红包算法java实现
  12. 库仑计BQ27441使用
  13. 微信打飞机--Java版
  14. 【微信小程序】(一)创建项目与前端编写
  15. 互联网大厂校招大战:华为研究生年薪最高到45万,腾讯offer数增四成
  16. for i in range()使用方法
  17. SPI配置高精度采集8通道24位ADS1256(卷一---datasheet阅读总结篇)
  18. 机智云(esp8266)与74hc595控制16路继电器
  19. kindle长期未使用,界面显示电池感叹号
  20. NLP专题直播 | 详谈词向量技术:从Word2Vec, BERT到XLNet

热门文章

  1. C语言编写2048小游戏
  2. dcf是ea211发动机吗_大众有的车怎么把ea211换成dcf了?
  3. Flink流计算编程--在WindowedStream中体会EventTime与ProcessingTime
  4. hbase的备份恢复1,Expor过程,Import过程,统计hbase表行数;hbase备份恢复方式2:使用hdfs备份hbase数据,基于hbase数据进行恢复
  5. 04_面向初学者的快速入门、建立图像分类的一个神经网络、训练这个神经网络、评估模型的精确度
  6. SQLite 创建数据库(http://www.w3cschool.cc/sqlite/sqlite-create-database.html)
  7. 6进程原语:wait()和waitpid()函数
  8. 渥太华大学计算机工程,渥太华大学电气与计算机工程硕士专业.pdf
  9. 深入浅出设计模式之设计模式简介
  10. data augmentation 数据增强方法总结