如何估算mysql读取数据所花费的时间?

比如现在有一个硬盘,是7500转每分钟,每转一圈时间就是0.008秒,即8毫秒,假设现在要读取20000条数据,每条数据长度大概0.1kb,总的数据大小是2mb,能不能大概估算出所需要的读取时间是多少呢?如果中间还有连表等操作,影响因素又是什么呢?
一旦我们知道了时间,更容易对编写的sql效率有更好的认识.
请各位赐教,mysql读取数据的时间的因素有哪些,且大概计算的方式是什么样的呢?

修改问题:

楼下的大神都给出了非常宝贵的意见!谢谢您们!!其实我是更希望知道这个时间的估算是基于一个怎样的因素.
当然如果能通过这个时间和sql查询的时间对比,来为优化sql提供基础参考当然更好.
不过我其实更关心的是时间计算的影响因素和计算过程.
再次感谢大家!

阅读 5.3k
3 个回答

重要的是你读了多少数据,丢弃了多少,最后取到了多少,知道从磁盘获取数据的时间公式有什么意义呢?

所以sql的优化是怎样从最少的数据集获取到你的结果才是最重要的,而这些是跟sql写法,业务逻辑,索引规则有关的,从磁盘读取到内存花费的时间对整个sql运行时间来说就是个const,SAS换成ssd这个const就小点而已

一般优化sql不会去直接计算时间,影响因素比较多,但是你可以通过explain语句分析sql的执行机制和效率。用法就是explain加上要分析的sql。

explain select * from tb where ...

@clcx_1315 已经把你问题的意义阐述过了,磁盘读取时间只能估算,对sql优化的意义不大,只有在数据库内部在评估整体语句的COST时参考使用,这方面需要综合考虑的因素太多,如:
1、磁盘内外圈的读取速度差异很大,怎么知道数据存在哪个区域?
2、从磁盘的缓存中读取怎么算时间?
3、数据库、操作系统会把多次IO进行合并,怎么算?
4、如果能从数据库的缓存中获取数据呢?

这方面oracle数据库有个估算的公式,如果确实想了解的自己搜一下,深入研究数据库Internal的话才有点用。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题