mysql in語句優化

2021-10-05 23:33:28 字數 1547 閱讀 3529

mysql會對sql語句做優化, in 後面的條件不超過一定數量仍然會使用索引。

mysql 會根據索引長度和in後面條件數量判斷是否使用索引。

另外,如果是in後面是子查詢,則不會使用索引。

乙個文章庫,裡面有兩個表:category和article。category裡面有10條分類資料。article裡面有 20萬條。article裡面有乙個"article_category"欄位是與category裡的"category_id"字段相對應的。 article表裡面已經把 article_category字義為了索引。資料庫大小為1.3g。

問題描述:

執行乙個很普通的查詢:

select

*from

`article`

where article_category=

11order

by article_id desc

limit

5//執行時間大約要5秒左右

解決方案:

建乙個索引:

create

index idx_u on article (article_category,article_id)

;

select

*from

`article`

where article_category=

11order

by article_id desc

limit

5

減少到0.0027秒

繼續問題:

select

*from

`article`

where article_category in(2

,3)order

by article_id desc

limit

5

執行時間要11.2850秒。

使用or:

select

*from article

where article_category=

2or article_category=

3order

by article_id desc

limit

5

使用union all:

(

select

*from article where article_category=

2order

by article_id desc

limit5)

union

all(

select

*from article where article_category=

3order

by article_id desc

limit5)

order

by article_id desc

limit

5

mysql in語句優化

mysql會對sql語句做優化,in 後面的條件不超過一定數量仍然會使用索引。mysql 會根據索引長度和in後面條件數量判斷是否使用索引。另外,如果是in後面是子查詢,則不會使用索引。乙個文章庫,裡面有兩個表 category和article。category裡面有10條分類資料。article裡...

mysql in條件語句

偶爾看到的。或許有人會注意過,但我以前真不知道 sql select from table where id in 3,6,9,1,2,5,8,7 這樣的情況取出來後,其實,id還是按1,2,3,4,5,6,7,8,9,排序的,但如果我們真要按in裡面的順序排序怎麼辦?sql能不能完成?是否需要取回...

MySQL IN 查詢優化

前幾天看到一篇博文將 in 子查詢 優化為 left join 的問題,今天自己測試測試。資料表為 test item 和 test item tag 兩個表 test item 兩個字段 item id char 36 release time int 11 共10w條記錄 test item t...