網(wǎng)上有很多人都在談?wù)搊r與in的使用,有的說二者沒有什么區(qū)別,其實不然,估計是測試做的不夠,其實or的效率為O(n),而in的效率為O(log2n),當基數(shù)越大時,in的效率就能凸顯出來了。
成都創(chuàng)新互聯(lián)是一家以重慶網(wǎng)站建設(shè)公司、網(wǎng)頁設(shè)計、品牌設(shè)計、軟件運維、成都網(wǎng)站營銷、小程序App開發(fā)等移動開發(fā)為一體互聯(lián)網(wǎng)公司。已累計為門窗定制等眾行業(yè)中小客戶提供優(yōu)質(zhì)的互聯(lián)網(wǎng)建站和軟件開發(fā)服務(wù)。
有人做了這么一組實驗(測試庫數(shù)據(jù)為1000萬條記錄):A組分別用or與in查詢3條記錄,B組分別用or與in查詢120條記錄,C組分別用or與in查詢500條記錄,D組分別用or與in查詢1000條記錄.
第一種情況,目標列為主鍵的情況,4組測試執(zhí)行計劃一樣,執(zhí)行的時間也基本沒有區(qū)別。
A組or和in的執(zhí)行時間: or的執(zhí)行時間為:0.002s in的執(zhí)行時間為:0.002s
B組or和in的執(zhí)行時間: or的執(zhí)行時間為:0.004s in的執(zhí)行時間為:0.004s
C組or和in的執(zhí)行時間: or的執(zhí)行時間為:0.006s in的執(zhí)行時間為:0.005s
D組or和in的執(zhí)行時間: or的執(zhí)行時間為:0.017s in的執(zhí)行時間為:0.014s
第二種情況,目標列為一般索引的情況,4組測試執(zhí)行計劃一樣,執(zhí)行的時間也基本沒有區(qū)別。
A組or和in的執(zhí)行時間: or的執(zhí)行時間為:0.002s in的執(zhí)行時間為:0.002s
B組or和in的執(zhí)行時間: or的執(zhí)行時間為:0.006s in的執(zhí)行時間為:0.005s
C組or和in的執(zhí)行時間: or的執(zhí)行時間為:0.008s in的執(zhí)行時間為:0.008s
D組or和in的執(zhí)行時間: or的執(zhí)行時間為:0.020s in的執(zhí)行時間為:0.019s
第三種情況,目標列沒有索引的情況,4組測試執(zhí)行計劃就不一樣,執(zhí)行的時間也有了很大的區(qū)別。
A組or和in的執(zhí)行時間: or的執(zhí)行時間為:5.016s in的執(zhí)行時間為:5.071s
B組or和in的執(zhí)行時間: or的執(zhí)行時間為:1min 02s in的執(zhí)行時間為:5.018s
C組or和in的執(zhí)行時間: or的執(zhí)行時間為:1min 50s in的執(zhí)行時間為:5.010s
D組or和in的執(zhí)行時間: or的執(zhí)行時間為:6min 13s in的執(zhí)行時間為:5.047s
結(jié)論:
in和or的效率,取決目標條件列是否有索引或者是否是主鍵,如果有索引或者主鍵性能沒啥差別,如果沒有索引,in的性能要遠遠優(yōu)于or.
要么部門號=10且職位為經(jīng)理,要么部門號=20且職位為辦事員。只要滿足兩者之一就輸出記錄。不可能存在部門號既為10又為20,而且職位既為經(jīng)理又為辦事員的記錄。
再好好思考下這個邏輯。
項目中可能回遇到or 與? and? 連用,我認為or連接的前后是兩個條件.所以不能一個條件分開寫.
比如 一張表a? 有 user_code,shared,del,company_id四個字段? 我想查shared=1 且 del=0 或者del=0的數(shù)據(jù) 且company_id=1, shared是共享的意思,不區(qū)分公司,那么可以這樣寫
例? select? user_code from a where shared=1? and del=0 or del=0
網(wǎng)頁題目:mysql中or怎么用 mysql中or的用法
分享URL:http://www.yijiale78.com/article40/ddedpho.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、營銷型網(wǎng)站建設(shè)、電子商務(wù)、品牌網(wǎng)站設(shè)計、靜態(tài)網(wǎng)站、服務(wù)器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)