SQL 大佬来救命

查看 170|回复 14
作者:0x19921213   
select * from
(select rownum as xh, t.* from
(
        select * from (
        SELECT
                        *
                FROM
                        q_materialfusion
                       
                        where sjbj = '0'
                        and ( instr(mc, '1') > 0
                        OR instr(ssxmmc, '1') > 0
                  OR instr(ssxtzc, '1') > 0
            OR instr(xinghao, '1') > 0
      OR instr(gg, '1') > 0)
                        order by nf desc, mc asc
        ) where  rownum = 1;
这段 SQL 有优化空间吗,数据 200W ,返回需要 2 秒。

instr, select, SQL, from

8355   
那么压力给到楼下的大佬, 我血压上来了.
tramm   
你这看着都头疼,看看楼下怎么说
BeautifulSoap   
问了 chatgpt ,它建议我用 LIKE
dizheyoulan   
不懂 sql ,问了 chatgpt ,它说改成这样
```
SELECT *
FROM (
SELECT ROWNUM AS xh, t.*
FROM (
SELECT *
FROM q_materialfusion
WHERE sjbj = '0'
AND '1' IN (mc, ssxmmc, ssxtzc, xinghao, gg)
ORDER BY nf DESC, mc ASC
) t
WHERE ROWNUM = 1;
```
smallWang   
小白蹲一个 sql 大佬学习学习
raysonlu   
没有汇聚统计的逻辑,套这么多层干嘛?
siweipancc   
这查询,我只能用哇塞来形容。上全文搜索吧
sivacohan   
SELECT t.rownum as xh, t.*
FROM q_materialfusion as t
where t.sjbj = '0'
and t.rownum = 1
and (instr(t.mc, '1') > 0
OR instr(t.ssxmmc, '1') > 0
OR instr(t.ssxtzc, '1') > 0
OR instr(t.xinghao, '1') > 0
OR instr(t.gg, '1') > 0)
order by t.nf desc, t.mc asc;
这么写不可以吗?为什么要用多个子查询?
如果这么写可以,那就注意一下除了使用 instr 的部分其他查询条件最好有组合索引。
samv2   
where sjbj = '0' and concat(mc, ssxmmc, ssxtzc, xinghao, gg) like '%1%'
您需要登录后才可以回帖 登录 | 立即注册

返回顶部