資料庫select in語句怎麼優化

時間 2021-06-04 00:49:37

1樓:

1. t.fax_number 和 td.telephone 都應該有索引,不然怎麼弄都慢的

2. 換用存在語法代替in語法,樓上有說的

3. 不覺得連線語法會比存在語法快很多,lz可以試一下。

4. 試試以下變通會不會快一點

select sum(cnt) from (select (select count(*) as cnt from receivefax t where t.fax_number = td.telephone) as cnt from tmp_duanxin_ljx_20100402 td );

我試了一下這樣比存在語法要快一倍,連線語法和存在語法的速度差別不大

你是說td表中可能有重複的嗎?如果這樣的話,我這個查詢應該是沒有壓縮重複的,連線查詢也沒有壓縮,存在和in查詢都是忽略了td中的重複的。至於t中的重複,都是*肯定沒有壓縮的

查詢優化是很複雜的,和具體的表的設計情況、表中資料的重複情況等等也有很大關係的,你自己用多種方法試一試吧,如果是oracle 在pl/sql中執行完了,按f5進去可以看具體的執**況,其它的一般也帶查詢分析器之類的,只有這樣才能真正看出你的sql語句的執行效率的

2樓:寂寞偉哥

select count(*) from receivefax t where

exists (select td.telephone from tmp_duanxin_ljx_20100402 td where td.telephone=t.

fax_number)

試試這個

我覺得你應該使用表連線更有效率:

select count(*) from receivefax t, tmp_duanxin_ljx_20100402 td where td.telephone=t.fax_number

3樓:匿名使用者

select count(*) from receivefax tinner join tmp_duanxin_ljx_20100402 td

on t.fax_number=td.telephonein的效率低,而且如果是oracle的話,對於in子句結果集的數量也有限制

因為沒有你那麼大的資料量環境,所以無法測試比較執行時間。

sql 語句 in的優化。

4樓:匿名使用者

假設原來的句子是

select * from t1 where t1.f1 in (select t2.f2 from t2 where t2.f2=***)

和你的很類似

你用子查詢 很慢

我們現在修改為:

select t1.* from t1 ,t2 where t1.f1 = t2.f2 and t2.f2=***x

這裡使用了關聯查詢代替了子查詢大大提高效率。

其次你可以考慮在表t1.f1上加索引,提高查詢速度。

5樓:匿名使用者

嘗試在 in 的這個欄位上建索引

6樓:匿名使用者

這樣試下:

把id放到一張表中,

where id in(select id from 表)

7樓:guoke濤

select * from t1

join t2 on t1.f1=t2.f2

where t2.f2=***

sql語句in幾千個,怎麼優化

8樓:

建乙個表id_list,專門放這些個id,然後建個索引select a.orderno

from tbltest a,id_list bwhere a.id=b.id

9樓:全嗲逗樂

查詢這些id所在行的orderno 或者其他字段是否有相似的地方,比如假設這幾百個orderno 都是『a123...』型別

那麼就可以where orderno like 'a123%'

幫幫我優化一下sql語句,有兩個in

資料庫語句

set identity insert 允許將顯式值插入表的標識列中。語法set identity insert database.owner.引數database 是指定的表所駐留的資料庫名稱。owner 是表所有者的名稱。table 是含有標識列的表名。注釋任何時候,會話中只有乙個表的 iden...

sql資料庫使用者驗證語句,SQL資料庫使用者驗證語句

sql語句 select from tablename where userid userid and userpwd userpass 要不寫在儲存過程裡 set ansi nulls on set quoted identifier on goalter procedure dbo loginp...

oracle資料庫備份語句

exp 畢竟也需要連線到資料庫,也就是需要提供使用者名稱,密碼,所以你說的資料庫模式匯出,是無法正常實現的。但是使用dba使用者登陸,可以實現匯出整個資料庫的類似功能。資料庫模式 exp system passwd oracle full y file db081222.dmp log db0812...