面试的时候总会被问到一些性能相关的问题,比如QPS,比如能够承载的用户量,以及查询一条数据需要的实际时间等。
本文就持续更新,记录一些面经中出现的实战题目
比如一个问题:
MySQL中有30W条数据,查一个带索引的id需要多久,对具体多少ms有没有概念
先看gpt的回答:
这个问题的答案取决于许多因素,如:
-
索引类型:不同类型的索引在查询速度上有很大的差异。
-
数据库服务器的硬件配置:如果服务器的CPU、内存和磁盘速度较慢,查询时间可能会更长。
-
数据库中其他查询的负载:如果有其他查询正在运行,可能会影响查询时间。
-
数据库中数据的分布:如果需要查询的ID在数据集的开头或结尾,查询可能会更快。
-
数据库中数据的大小:如果每个ID都有大量的关联数据,查询可能会更慢。
综上所述,无法提供一个准确的答案。但是,用适当的索引,适当的硬件和优化的查询,查询30W条数据中的一个带索引的ID应该可以在几毫秒内完成。
参考这篇:
关于mysql百万100W数据查询优化_30万数据查询一般几秒_lumengabc的博客-CSDN博客
其给出的结果在大约0.5s或者0.16s,这样的查询结果,如果执行次数增加,那么延迟会肉眼可见的增大,我们确实需要进行一定的应对方式了。
自己做的实验来进行一些验证:
用navicat创建一张表
一些基础的配置:
在本表中,学号和姓名都是没有顺序的
我们利用数据生成,初步生成10W条数据,此时不设置索引
但是确保学号是唯一的:
生成的结果为:
首先,基于学号随便查询一条记录,0.025s
如果我们查询二十次,则有1s的延迟,并发场景的话,延迟肯定会更高。
如果我们查询一个不存在的学号:
推测是由于进行了全表扫描,所以时间会更久一点0.204s
我们进行分页查询:
我们尝试进行一些数据库表的优化。
1. 建立索引,我们为'学号'字段建立主键索引
优化之后:
但是并不一定代表查询就变快了,多测试几个值发现
并不一定加快查询速度。
我们进行分页查询操作:
如果想看到索引带来的效果,我们要select中查询我们建立索引包含的数值
可以对比上面的结果,查询速度得到微小提升。
结论:适当添加索引可以加快查询速度,我这个例子特别简单,在实际应用场景中,对表结构优化,索引优化还是很有好处的。
10W级数据量的情况下,查询一条带索引的id大概也需要0.025s的时间。(centos7,mariadb,1G内存)