sql相关优化
一、笛卡尔积介绍
1. 笛卡尔积全称笛卡尔乘积,笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尔积(Cartesian product),又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员
2. 表达式为:A×B = {(x,y)|x∈A∧y∈B}
3. 笛卡尔积在SQL中的应用,常用表达式为:
select * from 【表名,别名】,【表明,别名】 where 【别名.关联字段名=别名.关联字段名】
case: select * from depart a,Person b where a.Id=b.departId
4. 具体示例如下:我新建了一个部门和一个人员表
5. 相关笛卡尔积的查询表达式以及相关运行结果如下:
6. 注意事项:运用笛卡尔积表示式,其实就是类似于内连接查询,只不过不同的是,内连接查询会进行全表连接查询,而笛卡尔积查询首先运行的是后方的where条件进行过滤一遍,然后再进行乘积。这样可以更加有效的提高sql的查询效率,同时,如果需要进行左或者右连接查询时,就不能使用笛卡尔积查询,不然会导致最终的结果不正确。
二、sql进行优化
1. sql的查询步骤: 先进行where条件的过滤,然后再进行select 字段的查询。所以sql 的优化应该首先放置在where条件的应用上。
2. 应该避免在where条件中对null值进行判断,否则会导致进行全表查询。如:
select id from where number is null
应该给number赋初始值为0,然后修改为
select id from where number=0
3. in 和 not in 也要慎用,否则会导致全表扫描,如:
select id from t where num in(1,2,3)
对于连续的数值,能用 between 就不要用 in 了:
select id from t where num between 1 and 3
4. 应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:
select id from t where number/2=100
应改为:
select id from t where number=100*2
5. 任何地方都不要使用 select * from t ,用具体的字段列表代替“*”
6. 用 exists 代替 in
select num from a where num in(select num from b)
用下面的语句替换:
select num from a where exists(select 1 from b where num=a.num)
7.尽量使用inner join 查询,并且可以用笛卡尔积表达式进行替代。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构