mysql or條件可以使用索引而避免全表

2021-06-02 19:13:13 字數 2520 閱讀 8992

在某些情況下,or條件可以避免全表掃瞄的。本文使用mysql版本是5.7x

explain檢視,全表掃瞄了。

通常情況下, 用union替換where子句中的or將會起到較好的效果. 對索引列使用or將造成全表掃瞄. 

注意, 以上規則只針對多個索引列有效. 如果有column沒有被索引, 查詢效率可能會因為你沒有選擇or而降低. 

在下面的例子中, loc_id 和region上都建有索引.

高效:

select loc_id , loc_desc , region from location where loc_id = 10 

union

select loc_id , loc_desc , region from location where region = "melbourne"

低效:

select loc_id , loc desc , region from location where loc_id = 10 or region = "melbourne"
如果你堅持要用or, 那就需要返回記錄最少的索引列寫在最前面.

這是一條簡單易記的規則,但是實際的執行效果還須檢驗,在oracle8i下,兩者的執行路徑似乎是相同的. 

低效: 

select…. from location where loc_id = 10 or loc_id = 20 or loc_id = 30 

高效 select… from location where loc_in  in (10,20,30);

可以使用foreach遍歷迴圈的條件

大話c 中能使用foreach的集合的實現 大家都知道foreach的語法 foreach var item in items 通過這樣乙個簡單的語句,就能實現遍歷集合items中的所有元素。那麼,集合類 注意不是集合中的元素的類 是要滿足什麼條件才能用foreach遍歷呢?就像買衣服需要去找到賣衣...

可以使用xmp格式預設嗎 強制傳喚可以使用警械嗎

強制傳喚是針對行政案件的,特別是違反治安管理處罰法的行為人,如果行為人沒有正當的理由而拒絕公安機關傳喚的,那麼可以強制傳喚。一 強制傳喚可以使用警械嗎 可以使用警械。強制傳喚,是公安機關在辦理行政案件時,對無正當理由不接受傳喚或者逃避傳喚的違反治安管理的違法嫌疑人,使用強制方法將其帶至公安機關或指定...

Hibernate可以使用insert語句

hibernate hql是可以使用insert語句的,好多同行只是沒有注意到。一般情況下不怎麼使用,會容易忘記它,實際上insert語句用在插入報表表中資料常用到,也非常的方便。string hql insert into tusers tname,tpassword select u.name,...