亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

mysql百萬數據查詢 用什么代替in,該如何處理?

mysql百萬數據查詢 用什么代替in,該如何處理?

智慧大石 2019-04-19 10:11:54
mysql百萬數據查詢 用什么代替in,該如何處理
查看完整描述

3 回答

?
心有法竹

TA貢獻1866條經驗 獲得超5個贊

mysql百萬數據查詢用exists 代替 in 是一個好的選擇:

select num from a where num in(select num from b) 

用下面的語句替換:

select num from a where exists(select 1 from b where num=a.num)

SQL查詢語句優化方法: 

1、應盡量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用索引而進行全表掃描。

2、對查詢進行優化,應盡量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引。

3、應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃描,如:

select id from t where num is null

可以在num上設置默認值0,確保表中num列沒有null值,然后這樣查詢:

select id from t where num=0

4、盡量避免在 where 子句中使用 or 來連接條件,否則將導致引擎放棄使用索引而進行全表掃描,如:

select id from t where num=10 or num=20

可以這樣查詢:

select id from t where num=10

union all

select id from t where num=20

5、下面的查詢也將導致全表掃描:(不能前置百分號)

select id from t where name like ‘%c%’

若要提高效率,可以考慮全文檢索。



查看完整回答
1 反對 回復 2019-04-23
?
不負相思意

TA貢獻1777條經驗 獲得超10個贊

這個主鍵ID其實已經是有建立了索引的了,而在IN查詢當中并沒有用到而已,其實你可以試試IN里的id少些時,是會用到索引的,但當IN里的id占據全表的大部分數據量時,mysql采用的時全表掃描。在這個時候可以考慮:1.split返回臨時表進行表連接,2.使用緩存遍歷

查看完整回答
反對 回復 2019-04-23
  • 3 回答
  • 0 關注
  • 7889 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號