1. 程式人生 > >資料庫select in語句怎麼優化

資料庫select in語句怎麼優化

SELECT COUNT(*) FROM receivefax t WHERE t.fax_number IN (SELECT td.telephone FROM tmp_duanxin_ljx_20100402 td)
怎麼能優化下,表t資料量近4000萬 表td資料量32萬多
過程是在表td裡的資料通過telephone=fax_number 關聯查出在表t裡有多少量
高手出來幫忙下,非常感謝啊,等的鬱悶死了

補充下,表td裡的一條資料可能在表t裡有能對應多條記錄,我只需要一對一就可以,是不是直接distinct就可以了

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語句的執行效率的

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

select count(*) from receivefax t
inner join tmp_duanxin_ljx_20100402 td 
on t.fax_number=td.telephone

In的效率低,而且如果是Oracle的話,對於in子句結果集的數量也有限制

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

更多taol討論:http://bbs.csdn.net/topics/310105564

相關推薦

資料庫select in語句怎麼優化

SELECT COUNT(*) FROM receivefax t WHERE t.fax_number IN (SELECT td.telephone FROM tmp_duanxin_ljx_20100402 td) 怎麼能優化下,表t資料量近4000萬 表td資料量3

Sql語句優化-查詢兩表不同行NOT IN、NOT EXISTS、連接查詢Left Join

exists join ngs sdn 連接查詢 blog 建議 開發 word 在實際開發中,我們往往需要比較兩個或多個表數據的差別,比較那些數據相同那些數據不相同,這時我們有一下三種方法可以使用:1. IN或NOT IN,2. EXIST或NOTEXIST,

VB6基本資料庫應用(三):連線資料庫與SQL語句Select語句初步

資料庫我們已經建好了,重提一下上一章的結果,我們最後建立了一張Student的表,其中有StudentID(數字的雙精度型別)和StudentName(文字型別。補充一下,2013中有【長文字】和【短文字】,人名不會很長,根據上一章選擇儘量小的資料型別的規則,這裡就選【短文字】就可以了)。儘

常用傻瓜式SQL Server語句,優化資料庫

基本都是網路收集來的,有些挺好用,例如查詢是否缺索引的語句。   查找出什麼語句佔記憶體最高,針對佔記憶體高的語句進行優化 SELECT SS.SUM_EXECUTION_COUNT, T.TEXT, SS.SUM_TOTAL_ELAPSED_TIME, SS.SU

資料庫效能之SQL語句優化(中)

百萬級資料優化 一.I_IPTVLOGIN00 (五十萬),TEMP_STBINFO (五百萬) 1.select a.loginAccount,a.stbID,b.DEV_SNO from I_IPTVLOGIN00 a,TEMP_STBINFO b where a.s

資料庫優化SQL語句優化修改

1.對查詢進行優化,要儘量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引。 2.應儘量避免在 where 子句中對欄位進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃描,如: select id from t where num

mysql資料庫優化大全--sql語句優化大全

一,SQL語句效能優化 1, 對查詢進行優化,應儘量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索 引。 2,應儘量避免在 where 子句中對欄位進行 null 值判斷,建立表時NULL是預設值,但大多數時候 應該使用NOT N

資料庫效能優化之SQL語句優化

避免使用HAVING子句, HAVING 只會在檢索出所有記錄之後才對結果集進行過濾. 這個處理需要排序,總計等操作. 如果能通過WHERE子句限制記錄的數目,那就能減少這方面的開銷. (非oracle中)on、where、having這三個都可以加條件的子句中,on是最先執行,where次之,having最

Sql語句優化-查詢兩表不同行NOT IN、NOT EXISTS、連線查詢Left Join

在實際開發中,我們往往需要比較兩個或多個表資料的差別,比較那些資料相同那些資料不相同,這時我們有一下三種方法可以使用:1. IN或NOT IN,2. EXIST或NOTEXIST,3.使用連線查詢(inner join,left join 或者 right join)。

MySQL資料庫select語句的使用方法

select語句可 以用回車分隔 $sql="select * from article where id=1"和 $sql="select * from article where id=1" 都可以得到正確的結果,但有時分開寫或許能 更明瞭一點,特別是當sql語句比較長時。 批量查詢

sql優化in語句

       在很多時候我們在sql中會用到in語句,in語句會使得sql查詢不使用索引,這也大大減低了sql執行的效率,為了能夠讓sql在查詢中使用索引,有很多種方式可以優化,比如如果in中的型別是確定值,那麼可以用 欄位=確定值 多個條件直接用or連線,這樣也可以優化這

sql語句優化:用join取代not in

寫了好幾個頁面,速度都上不去,瓶頸在於SQL查詢。太多的表,太多的not in,總是從一大推表和資料中篩選出一點資料。看了很多關於SQL優化的文章,都強烈要求不要太多使用not in查詢,最好用表連線來取代它。如:select ID,name from Table_A wh

資料庫效能優化之SQL語句優化1

一、問題的提出 在應用系統開發初期,由於開發資料庫資料比較少,對於查詢SQL語句,複雜檢視的的編寫等體會不出SQL語句各種寫法的效能優劣,但是如果將應用系統提交實際應用後,隨著資料庫中資料的增加,系統的響應速度就成為目前系統需要解決的最主要的問題之一。系統優化中一個很重要的方面就是SQL語句的優化。對於

Sql語句優化之用exists、not exists替代in、not in

在許多基於基礎表的查詢中,為了滿足一個條件,往往需要對另一個表進行聯接。在這種情況下, 使用exists(或not exists)通常將提高查詢的效率。在子查詢中,not in子句將執行一個內部的排序和合並。無論在哪種情況下,not in都是最低效的 (因為它對子查詢中的表

資料庫優化語句優化模式optimizer

一、優化資料庫1.調整資料結構的設計(分割槽、索引)2.調整應用程式結構設計3.調整資料庫的SQL查詢(語句優化器 oracle optimizer 和行鎖管理器)4.調整伺服器記憶體分配(調整資料庫系統全域性區SGA的資料快取區,日誌緩衝區和共享池大小,還可以調整程式全

select in排序 mysql select in (array) order by array

mysql1、substring_index(不準確):SELECT * FROM `tvmars_channel` WHERE `name` IN (‘張藝謀‘,‘1080P‘,‘香港電影‘,‘好萊塢‘,‘喜劇電影‘,‘動作電影‘) order by substring_index(‘張藝謀,1080P,香

提高系統性能——對SQL語句優化的思考

http art pos select 語句 聯合 data 過程 情況 軟件在研發的過程中自始至終都在留意著系統的可擴展性。但與此同一時候也在關註著系統的性能,SQL語句作為系統性能的一環不容忽視。從今天開始結合開發的經驗,談一下我對SQL語句優化的理

SQL update select結合語句詳解及應用

應用 comm 執行 sel ron 詳解 strong 閱讀 等於 SQL update select結合語句詳解及應用 2013年10月1日 MK 數據庫 19 閱讀 157639次 QL update select語句 最常用的update語法是: 1 2

SQL語句優化

函數 提高 我們 查詢 str ont ransac pro sys 1、在查詢中不要使用“select *” 檢索不必要的列會帶來額外的系統開銷,有句話叫做“該省的則省”; 2、在select清單中避免不必要的列,在連接條件中避免不必要的表; 3、不要在子查詢中使用co

2.MySQL的select distinct語句

bsp com -a images select -s distinct pan 字段 2.MySQL的select distinct語句 作用:用於排除某列中的相同的字段 測試: 註意:僅限於單列: 2.MySQL的select distinct語句