上周我总结了SQL 的使用及一些使用技巧
这周补充总结下项目上遇到(或根据遇到的情况发散学习)的SQL 技巧
一、 万能查询 SQL(统计数据时的万能,也许其他方面并不万能) 所谓万能 SQL 是在不考虑效率的情况下,几乎都能通用的查询 SQL
目前我发现的万能 SQL 包括两种形式: 形式一、相同的记录需要得到多种该记录对应的唯一结果,而这些结果不能在同一个 SQL 查询
先看下我的公式: Select * from (从主表查询唯一记录数) t1, (查询 t1 记录唯一对应的结果 1) t2, (查询 t1 记录唯一对应的结果 2)t3, Where t1…=t2…
(+) And t1…=t2…
(+) 再解释下上面的查询 第一步,查询得到t1,t1 做为结果的基列,是正确结果的一部分
T1 的记录数与最终结果记录数相同
第二步,t2,t3 两个查询只是对 t1 结果列的一个补充
在我的应用中,t2 与 t3 大多都是以与 t1 相关联的字段进行 group by 的一个统计结果
需要注意对应 t1 的一条记录,t2 t3 不能有多条结果
第三步,t1 与 t2,t3 进行外连接,查询出结果
形式二、UNION 与 UNION ALL 两个或多个来源不同的信息需要汇总到一起,就需要 UNION 或 UNION ALL 形式一的思想是:固定行数不变
形式二的思想是:固定列数不变
那么形式一加形式二是否就实现了万能查询了呢
至少对我现在这个应用去统计非常苛刻的需求来说万能查询几乎都是万能的
需要注意的是: 万能查询效率问题: 在一些情况下,大多查询都走索引,效率还是很高的
在另外一些情况下,查询也是走了索引,但效率就很低,为什么
因为查询数据量大,SQL 结构不是最优
还有一种情况,查询不走索引,当然不走索引不一定慢
遇到这种问题时,一般把查