当前位置:首页 » 编程语言 » sql嵌套查询优化
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql嵌套查询优化

发布时间: 2022-04-12 19:38:23

sql select 嵌套 优化

先看看执行计划那部分耗时,才好解决,
先在算法上优化,例如(select count(*)...)那个子查询可以转换成exists语法
再在索引上优化,例如datediff会导致DateTo字段的索引无法使用,在WHERE以后对字段慎用函数理由即此
最后在表设计上优化,例如适当冗余
这三把斧基本上能解决你大部分问题,终极优化是重量级的如KEY-VALUE缓存数据库,增加内存服务器,建分区表,甚至上lucene,SOLOR等

⑵ SQL嵌套查询优化

单从语句方面基本上没有优化的地方了,可以尝试下
SELECT count(c.CUST_NO)
FROM CI_CUS_PERSON c
LEFT JOIN CI_CUS_CERT CERT ON c.CUST_NO=CERT.CUST_NO
WHERE c.CUST_TYPE like '1%'
AND c.CUST_NO IN (SELECT CUST_NO FROM OP_ASN_CUST_INST aci WHERE ORGID IN (select eao.ORGID from eos_auth_org eao WHERE eao.OPERATORID=1)) 如果后面那个in里面的查询量不大的话。

可以考虑索引
OP_ASN_CUST_INST.CUST_NO,OP_ASN_CUST_INST.ORGID,
CI_CUS_PERSON.CUST_NO上面建立索引

⑶ SQL语句多层嵌套查询很慢,怎么优化,求方案

大致的看了下,有点晕,内嵌的几个select只是对同一个表的部分不同条件进行分组计算,没必要写两个查询,其中还嵌套一个,我也是醉了,可以用case-when去解决这个问题。

⑷ sql查询多层嵌套如何简化

1、将多层嵌套查询拆分为多个临时表,若需要持久化可以使用物理临时表,若是其他程序也许调用,那就用全局临时表
2、在SQL2000时,使用临时表,可以有效提升查询效率
3、除了MSSQL以外,其他数据库效果未知。

⑸ sql 嵌套查询语句怎么优化

最外层的SQL SELECT语句里面的条件,你不要全部套进去,应该先把条件查出来,然后组建最外层SQL语句。简单来说,就是将里面的SELECT语句查出来的结果保存到变量中,然后再来将条件整合,组成最外层SQL语句。LEFT,它并不是加快查询速度,它只不过加快结果集返回的速度。实际上,你并不能感觉到这速度的提高。不过我们还是建议,当你查询很长字符串时(比如说记录的标题)在页面中显示,可以使用LEFT在SQL服务端进行字符截取。

⑹ 标准SQL嵌套查询语句

1、简单子查询

select name,age from person

where age >

(

select age from person

where name = '网络'

)

2、in嵌套查询

select name from person

where countryid in

(

select countryid from country

where countryname = '网络'

)

(6)sql嵌套查询优化扩展阅读:

嵌套查询的意思是,一个查询语句(select-from-where)查询语句块可以嵌套在另外一个查询块的where子句中,称为嵌套查询,其中外层查询也称为父查询,主查询,内层查询也称子查询,从查询。

子查询的语法规则

1、子查询的select查询总是使用圆括号括起来。

2、不能包括compute或for.browse子句。

3、如果同时指定top子句,则可能只包括order by子句。

4、子查询最多可以嵌套到32层。个别查询可能会不支持32层嵌套。

5、任何可以使用表达式的地方都可以使用子查询,只要它返回的是单个值。

6、如果某个表只出现在子查询中二不出现在外部查询中,那么该表的列就无法包含在输出中。

⑺ sql多重嵌套子查询,求优化!!!!!

select MenuText from mainmenu where PermissionID in(
select distinct PermissionID from Role_Permission where RoleID
in (select RoleID from User_Roles where userid =
(select id from users where Account='seven')))

⑻ SQL要做6张表的嵌套查询,大神们救救小弟,我只会最简单最简单的inner join,求大神们给优化一下代码。

你这个并非是什么嵌套查询啊,只是表不止一个,有个外连接而已。你可以把所有的inner join看成是where条件。
影响速度的地方应该有2个,一个是你用inner join结合出来的数据量太大,可能抽出的重复数据太多,所以你才使用了distinct,应该想办法去掉不需要的冗余数据。另一个就是你用了right join,整个sql看起来貌似以b为主表,但是其实a才是主表,折腾了一堆,都是为a做铺垫。根据各个表的数据量,把整个sql重构一下就可以了。

⑼ 请高手指导,sql如何提高嵌套查询效率

给shop_cr 字段加索引
not改成左外连接 + 空值判断

select a.* from dh_w a,(
select c.picture_id from dh_proct c left outer join (
SELECT sm_proct_id FROM dh_had_upload WHERE shop_cr='IU'
union
SELECT sm_proct_id FROM dh_arrange_upload WHERE shop_cr='IU'
) d on c.id = d.sm_proct_id
where d.sm_proct_id is null
)b where a.num =b.picture_id
ORDER BY a.id limit 0,90

⑽ sql查询优化问题 去掉了一个嵌套in查询居然更慢了,为什吗

如果子查询数据量比较大的话,可以试着用exist。
1.exist,not exist一般都是与子查询一起使用. In可以与子查询一起使用,也可以直接in (a,b.....)
2.exist会针对子查询的表使用索引. not exist会对主子查询都会使用索引. in与子查询一起使用的时候,只能针对主查询使用索引. not in则不会使用任何索引. 注意,一直以来认为exists比in效率高的说法是不准确的。
in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。
如果查询的两个表大小相当,那么用in和exists差别不大。
如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in:
例如:表A(小表),表B(大表)1:select * from A where cc in (select cc from B)
效率低,用到了A表上cc列的索引;select * from A where exists(select cc from B where cc=A.cc)
效率高,用到了B表上cc列的索引。
相反的2:select * from B where cc in (select cc from A)
效率高,用到了B表上cc列的索引;select * from B where exists(select cc from A where cc=B.cc)
效率低,用到了A表上cc列的索引。
not in 和not exists如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;而not extsts 的子查询依然能用到表上的索引。所以无论那个表大,用not exists都比not in要快。