1. 查询性能优化:从数据库查询数据时,你一定遇到过查询很慢的情况,请问你是怎么处理的。
答:
遇到的问题描述:是遇到过这种情况,我们给客户做过一款软件,日志库搜集了6000万条数据,显示、查询时候慢的要命。
查询慢的原因:通常情况下有几种情况可能导致,①硬件资源不足(不考虑);②数据量确实很大(不考虑);③并发量大,架构有问题;④数据表设计有问题;⑤查询语句存在性能问题。
可行的解决方案:
①:升级硬件资源,内存、存储、磁盘、CPU
②:数据量大分两种情况:
- 表中数据多,这个是正常情况(处理的就是这种情况);
- 查询出来的结果数据量大,这种情况可以分页加载或触发式加载或者加载一部分。
③:并发量大,如果是服务器经常处于高负荷状态,那就需要增加服务器,做负载均衡;如果数据库读写都很频繁,那么可以读写分离。
④:表设计有问题,没有创建索引,没有创建对索引。索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。创建索引是提高查询速度最有效的方式。创建索引应遵守一定的规则:
- 在经常进行条件查询,但是没有指定为外键的列上建立索引,而不经常查询的字段则由优化器自动生成索引。
- 在频繁用到排序、分组的字段上建立索引
- 在相同值少的字段上建立索引
- 不能创建索引过多,否则会对写数据造成影响
⑤:查询Sql语句写的有问题,这个是最常见的导致性能问题的原因,有以下几种情况:
- 主查询或子查询中使用Select * 查询或查询过多冗余字段
- 一个查询语句中,主查询和子查询语句中频繁使用排序或分组(Order By,Group By)
- 语句写的不当,导致Sql放弃使用索引查询,包括:对null进行判断;使用!=或<>操作符;使用连接符or;使用in、not in;使用模糊查询like;
- 联表查询时,有的数据被反复查询
所以我在对查询进行优化的时候,我首先重新检查表的索引是否创建的合理,然后根据以上的几点,检查查询语句是否存在可改进的地方,然后运行Profiler,进行查询跟踪优化。(尽量快速的描述)
时间: 2024-07-28 14:16:21