写SQL语句性能的时要注意重要的一点:
不要用程序的开发思维去思考数据库
在数据库中,SQL语句是一个抽象的概念,而不是代表具体的实现。一个简单的例子,比如A表与B表做链接,具体的Loop Join实现逻辑的代码是
for each row in t1 matching range{
for each row in t2 matching reference key{
for each row in t3 {
if row satisfies join conditions,
send to client
}
}
}
而SQl语句仅需一句
select * from a inner join b on a.clo1=b.col2,
该SQL语句仅仅写了你希望获得的结果,而没有写任何实现逻辑,因此SQL是无关实现抽象的。
那么具体如何执行在关系数据库中都有一个所谓的“优化器”实现,现代关系数据库优化器是基于成本选择具体执行步骤的,因此妨碍优化器最优执行计划的SQL就是不是好SQL。
- 选择最有效率的表名顺序
- where子句中的连接顺序
- select子句避免使用‘*’
- 计算记录条数
- 使用表的别名(Alias
- 用where子句替换having子句
应避免大量的表join会导致中间结果集不准确,从而限制优化器选择较好的执行计划
来源:CSDN
作者:shouziLYS
链接:https://blog.csdn.net/weixin_46189187/article/details/104055909