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...