這篇文章主要介紹“SQL開發(fā)規(guī)范中的有哪些誤區(qū)”,在日常操作中,相信很多人在SQL開發(fā)規(guī)范中的有哪些誤區(qū)問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”SQL開發(fā)規(guī)范中的有哪些誤區(qū)”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
魯山網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)公司,魯山網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為魯山1000+提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢,請找那個售后服務(wù)好的魯山做網(wǎng)站的公司定做!
1、假設(shè)一個表同時有兩個索引,idx_int_c1,idx_varchar_c2在:select*from tb where c1=100000 or c2='zhishutang';這個SQL會用到哪個索引?為什么?
大多數(shù)人都會選擇第一個。其實選擇任何一個索引都是錯誤的。大多數(shù)企業(yè)都會基于CPU,或者說基于成本優(yōu)化。如果按照c1來算,兩個條件同時滿足,它會選擇靠前的;如果只能滿足一個,它會選擇最優(yōu)的,這是成本優(yōu)化最核心的原理,選擇最適合的狀態(tài)。從成本優(yōu)化的角度,應(yīng)該誰處于空閑,誰就去工作。不一定是運(yùn)程最快,最重要的是合適。
2、還有,如何判斷SQL運(yùn)行的時候,哪個最好。
比如上圖中:一個是不加limit,一個是加了limit,如果整體時間都在1S以下,哪一個最好?很多人會說,肯定是加了limit的好。但是,如何證明?
在優(yōu)化之前,在終端上做下狀態(tài)刷新,分別執(zhí)行這兩個SQL。然后對比數(shù)據(jù)。比如第一個SQL之前是1個Key,后來讀了17次。而第二個SQL是從1個Key開始讀了4次。這說明第二個動作少,效果更好。所以,判斷一個SQL好還是壞,是可以量化的。
3、另外是關(guān)于delete優(yōu)化的問題。之前,有一個人求助,說一個delete語句執(zhí)行了2個多小時了,還沒執(zhí)行完,能不能把這個SQL回滾?答案是不能,如果你直接回滾,會死得更慘。
評價一個SQL能不能回滾,或者說進(jìn)行到什么程度?大家都有同樣一個感受是,有一個進(jìn)度條該多好。但事實是,SQL沒有。有很多人很暴力,遇到這種情況會直接重啟。不重啟會卡死,因為它阻塞了后面的任務(wù),SQL不能查詢。
筆者建議不要暴力重啟,先執(zhí)行一個“show engine innodb status\G”語句,這樣能看到執(zhí)行時間。如果沒有運(yùn)行狀態(tài),就可以Kill掉。
到此,關(guān)于“SQL開發(fā)規(guī)范中的有哪些誤區(qū)”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
名稱欄目:SQL開發(fā)規(guī)范中的有哪些誤區(qū)
分享地址:http://weahome.cn/article/pepgpi.html