MySql in子句 效率低下優化
背景:
更新一張表中的某些記錄值,更新條件來自另一張含有200多萬記錄的表,效率極其低下,耗時高達幾分鐘。
update clear_res set candelete=0 where resid in ( select distinct resourceid from att_attentionresult where important=0 );
耗時 365s
優化後
update clear_res set candelete=0 where resid in ( select resourceid from ( select distinct resourceid from att_attentionresult where important=0 ) as tmp );
耗時 1.41s
總結:對於where xxx in 子句效率極其低下問題,經過in的子句外包裝一層select xxx from( ... )as tmp 後,極大優化效率。
相關推薦
MySql in子句 效率低下優化
背景: 更新一張表中的某些記錄值,更新條件來自另一張含有200多萬記錄的表,效率極其低下,耗時高達幾分鐘。 update clear_res set candelete=0 where resid in ( select distinct resourceid fro
MySql in子句 效率低下優化(親測有效,從200秒變1秒)
MySql in子句 效率低下優化 背景: 更新一張表中的某些記錄值,更新條件來自另一張含有200多萬記錄的表,效率極其低下,耗時高達幾分鐘。 update clear_res set candelete=0 where resid in ( select distinct re
mysql in的效率問題
mysql 初級入門狗 被學長們教育了一頓決定寫個東西記錄一下 select *from a where id in (select id from b); 這麼寫sql 語法上是沒問題的 但是一定會被老大罵死 這麼寫效率能低還到死 很容易就10幾秒才跑完 原
MySQL的in查詢效率太低的解決辦法之一與其它優化示例
最近在做一個MySQL資料庫的查詢(查詢出指定時間之後凡是上傳過圖片的使用者所在的鎮和鎮的管理員名),查詢語句如下: SELECT DISTINCT user_name,town_name FROM t_farmers WHERE id IN (SELECT DIST
mysql in 子查詢 效率慢 優化(轉)
現在的CMS系統、部落格系統、BBS等都喜歡使用標籤tag作交叉連結,因此我也嚐鮮用了下。但用了後發現我想查詢某個tag的文章列表時速度很慢,達到5秒之久!百思不解(後來終於解決),我的表結構是下面這樣的,文章只有690篇。 文章表article(id,title,content) 標籤表tag(tid,
MySQL in查詢優化
-name tails join spa csdn duplicate 查詢 tracking 全表掃描 https://blog.csdn.net/gua___gua/article/details/47401621 MySQL in查詢優化<一>
mysql in操作 索引優化的一個疑問
tree 一個 組合索引 範圍 組合 並且 and bsp 包含 茲有 Index (A,B,C) ——組合索引多字段是有序的,並且是個完整的BTree 索引。 下面條件可以用上該組合索引查詢: A>5 A=5 AND B>6 A=5 AND B=6 A
mysql中exist和in的效率
如果查詢的兩個表大小相當,那麼用in和exists差別不大。 如果兩個表中一個較小,一個是大表,則子查詢表大的用exists,子查詢表小的用in: 例如:表A(小表),表B(大表) 1: select * from A where cc in (select cc from B) 效率低,用
mysql中or和in的效率問題 (有無索引差別很大o(n)/log(n))
mysql中or和in的效率問題 在網上一直看到的是or和in的效率沒啥區別,一直也感覺是這樣,前幾天剛好在看《mysql資料庫開發的36條軍規》的文章,裡面提到了or和in的效率問題,文中提到or的效率為O(n),而in的效率
Mysql多表聯合查詢效率分析優化
1. 多表連線型別 1. 笛卡爾積(交叉連線) 在MySQL中可以為CROSS JOIN或者省略CROSS即JOIN,或者使用’,’ 如: SELECT * FROM table1 CROSS JOIN table2SELECT * FROM table1 JOIN
影響mysql查詢效率的優化點
資料庫管理系統實現了理論上的概念,但是這種在實際硬體裝置上的實現受到了實際物理條件的約束。其結果是,查詢需要花費一些時間--有時候需要很長的時間。本期專題的內容就是幫助你找到如何讓自己的等待時間最短的方法。 1、 使用索引 索引是提高查詢速度的最重要的工具。當然還有
mysql關於select where in的效率
很多大牛公司建議select where in中不要超過200,有的說不要超過500. 那麼問題來了,使用子查詢的時候如果結果級超過了500呢。 今天做了個測試 下面是測試結果,分別是兩個語句查詢10次所用的時間 select * from cp_bil
mysql中如何將查詢結果的多個記錄中的指定欄位放到一個二維陣列中,以及在in子句中使用陣列
$sql0="select * from portals_channel where ch_use=1 and tid=5 and (chid<>31 and chid<>39 and chid<>44 )"; $query0=e
解決PDO-mysql中LIMIT和IN子句執行失敗的問題
LIMIT子句執行失敗 資料庫連線用的是PDO,遇到分頁的場景, 在sql中的"LIMIT :offset, :pageSize"執行時model層的fetchAll()返回結果為空,原因是在model層繫結引數的時候$this-bindValue($placeHolder
Mysql語句執行效率檢查和通過索引優化_例項
#通過對錶的主要欄位,新增索引的方式.可以顯著的提高查詢效率 ALTER TABLE t_jt_contract_integral_detail ADD INDEX index_us
Mysql 子查詢效率優化
一、MySQL子查詢的位置 當一個查詢是另一個查詢的子部分是,稱之為子查詢(查詢語句中巢狀含有查詢語句)。子查詢也是使用頻率比較高的一種查詢型別。因此,優化子查詢,對於整個系統的效能也有直接的影響。 從查詢出現在SQL語句的位置
MySQL批量插入效率優化手記
在用C++寫一段mysql入庫程式碼時,用的connector/c++,使用了PreparedStatement方式單條insert,然後整個插入操作放在事務中,大致如下: begintrans PreparedStatement for(要插入的資料集) { se
mysql中or和in的效率問題
SELECT * FROM test WHERE id=93674701 OR id=9720356 OR id=31732184 OR id=53855095 OR id=33144472 OR id=71864888 OR id=27541768 OR id=27238726 OR id=836484
ORACLE使用WITH AS和HINT MATERIALIZE優化SQL解決FILTER效率低下
在做專案的過程中,一個頁面使用類似如下的SQL查詢資料,為了保密和使用方便,我把專案中有關的表名和欄位替換使用ORACLE資料庫中的系統表和欄位。 在我所做的專案中,類似ALL_TABLES的表中大概有8W多條資料,下面這個查詢SQL很慢。 WITH PARA
高性能mysql 4,5,6章優化總結
重復 自適應 數據存儲 復雜 insert reat order 是我 條目 針對數據庫的優化,我們不能單純的說從哪一個方面,需要結合數據表的建立,數據類型的選擇,索引的設計和sql語句來考慮,我就針對怎麽建表,怎麽選擇數據類型,如何應用B-tree索引,hash索引和覆蓋