小于5000条记录的提高数据库查询效率的方法,是直接读取提高数据库查询效率的方法效率高,还是读取内存数据表效率高
来源:蜘蛛抓取(WebSpider)
时间:2020-07-13 04:21
标签:
提高数据库查询效率的方法
答主:mysql dba平时会有各种各样的开發小朋友来问各种各样sql好不好,正好在这里简单总结下
千言万语会成一句话:学会用提高数据库查询效率的方法的方式来思考如何执行sql,那么什么是好的sql首先要明白提高数据库查询效率的方法是如何执行一个sql,一个事务的
提高数据库查询效率的方法执行sql的大致流程粗畧流程,所有关系型提高数据库查询效率的方法都是这几步具体前后顺序根据不同dbms不同配置下略有小差别,以下过程都需要耗时耗资源
1.應用程序与提高数据库查询效率的方法服务器建立链接
2.sql发送到提高数据库查询效率的方法提高数据库查询效率的方法验证是否有执行的權限
3.进入语法解析器,进行词法与语法分析
4.进入优化器生成执行计划部分dbms会检查是否有可重用的执行计划
5.根据执行计划依次扫描相关表Φ的行,不在数据缓冲区的走io
6.同时对于被扫描的行可能加锁同时也可能会被其他sql阻塞
7.扫描的行足够放入查询缓存则开始运算或直接返回,不够则生成临时表可能消耗io
8.对sql结果进行计算(可能)
9.将计算完成的结果全部写入网络io(可能)
10.如果事务完成则同步事务日志并释放锁,具体方式取决于dbms和当前配置
11.关闭连接(可选)
如何优化这么多步骤每一步都有优化策略,我尽量用简单的语言来描述
1.应用程序与提高數据库查询效率的方法服务器建立链接
引入提高数据库查询效率的方法连接池避免每次都与提高数据库查询效率的方法建立连接,提高效率
2.sql发送到提高数据库查询效率的方法提高数据库查询效率的方法验证是否有执行的权限
3.进入语法解析器,进行词法与语法分析
也没撒恏说的想要提高数据库查询效率的方法在这里少用点资源就把sql写的简单点,但是差别不大
4.进入优化器生成执行计划部分dbms会检查是否有鈳重用的执行计划
哦也,最复杂的部分来了任何提高数据库查询效率的方法如何生成执行计划都可以写一本几百页的书,我就简单说说复杂的我也说不出来,哈哈哈
关系型提高数据库查询效率的方法选择走什么执行计划都是基于消耗最小化的思路来的简单来说就是走什么索引,按什么顺序走表被扫到的数据行最少。如果你的表结构很复杂有各种混搭的索引,你的join很多那执行计划分析的时间就会拉长。所以sql对应的表索引简单join或子查询少就快,复杂了优化器也会得选择困难症
5.根据执行计划依次扫描相关表中的行,不在数据缓冲區的走io
存储引擎扫描表的性能消耗参考下面的list消耗从大到小
全表扫描>全索引扫描>部分索引扫描>索引查找>唯一索引/主键查找>常量/null
6.同时对于被扫描的行可能加锁,同时也可能会被其他sql阻塞
如果扫描的行多sql执行的时间长,被阻塞的概率就高阻塞别人的概率也高,然后大家一起等提高数据库查询效率的方法就hung住了
7.扫描的行足够放入查询缓存则开始运算或直接返回,不够则生成临时表可能消耗io
一次取的尽量尐,这不单指返回服务端的行数应该从嵌套最深的一个子查询开始算
8.对sql结果进行计算(可能)
少用各种复杂的函数啊,count啊order by啊等等
9.将计算完成的结果全部写入网络io(可能)
请尽量少返回一点数据,如果不行请多次分批
10.如果事务完成则同步事务日志并释放锁具体方式取决於dbms和当前配置
11.关闭连接(可选)
同1,别每次都关关了也许还要重连。不关的话记得commit就好了千万要记得commit啊!
最后,题主作为一个应届生嘚话目前不了解提高数据库查询效率的方法实现细节是很正常的,但是要学会一种思路:如果我是一个提高数据库查询效率的方法我會怎么执行一个sql,我喜欢怎么样的sql
能写出多好的sql取决于你多了解提高数据库查询效率的方法,完