優(yōu)化SQL語句的若干方法

不良的SQL往往來自于不恰當(dāng)?shù)乃饕O(shè)計肖方、不充份的連接條件和不可優(yōu)化的where子句。

一糜俗、 索引的建立和使用

  1. 定義主鍵的數(shù)據(jù)列一定要建立索引
  2. 定義有外鍵的數(shù)據(jù)列一定要建立索引
  3. 對于經(jīng)常查詢的數(shù)據(jù)列最好建立索引
  4. 對于需要在指定范圍內(nèi)的快速或頻繁查詢的數(shù)據(jù)列
  5. 經(jīng)常用在WHERE子句中的數(shù)據(jù)列
  6. 經(jīng)常出現(xiàn)在關(guān)鍵字order by、group by、distinct后面的字段蔗草,建立索引。如果建立的是復(fù)合索引疆柔,索引的字段順序要和這些關(guān)鍵字后面的字段順序一致咒精,否則索引不會被使用
  7. 對于那些查詢中很少涉及的列,重復(fù)值比較多的列不要建立索引
  8. 對于定義為text旷档、image和bit的數(shù)據(jù)類型的列不要建立索引
  9. 對于經(jīng)常存取的列避免建立索引
  10. 限制表上的索引數(shù)目模叙。對一個存在大量更新操作的表,所建索引的數(shù)目一般不要超過3個鞋屈,最多不要超過5個范咨。索引雖說提高了訪問速度故觅,但太多索引會影響數(shù)據(jù)的更新操作
  11. 對復(fù)合索引,按照字段在查詢條件中出現(xiàn)的頻度建立索引渠啊。在復(fù)合索引中输吏,記錄首先按照第一個字段排序。對于在第一個字段上取值相同的記錄替蛉,系統(tǒng)再按照第二個字段的取值排序贯溅,以此類推。因此只有復(fù)合索引的第一個字段出現(xiàn)在查詢條件中躲查,該索引才可能被使用,因此將應(yīng)用頻度高的字段它浅,放置在復(fù)合索引的前面,會使系統(tǒng)最大可能地使用此索引镣煮,發(fā)揮索引的作用

二姐霍、SQL語句的執(zhí)行原理

  1. 服務(wù)器在接收到查詢請求后,并不會馬上去數(shù)據(jù)庫查詢,而是在數(shù)據(jù)庫中的計劃緩存中找是否有相對應(yīng)的執(zhí)行計劃,如果存在,就直接調(diào)用已經(jīng)編譯好的執(zhí)行計劃,節(jié)省了執(zhí)行計劃的編譯時間
  2. 語法效驗、語義效驗典唇、權(quán)限驗證
  3. 針對SQL進行優(yōu)化,選擇不同的查詢算法以最高效的形式返回
  4. 語句執(zhí)行镊折,執(zhí)行順序:
    1) FROM 子句返回初始結(jié)果集
    2) WHERE 子句排除不滿足搜索條件的行
    3) GROUP BY 子句將選定的行收集到 GROUP BY 子句中各個唯一值的組中
    4) 選擇列表中指定的聚合函數(shù)可以計算各組的匯總值
    5) 此外,HAVING 子句排除不滿足搜索條件的行
    6) 計算所有的表達式
    7) 使用order by對結(jié)果集進行排序
  5. where條件執(zhí)行原理及效率
    首先要了解Where 條件執(zhí)行方向是從右向左的(如多條件判斷下蚓聘,會從最后一個條件來判斷過濾數(shù)據(jù)的腌乡,依次向前推進判斷)
    1) 注意SQL運算符(非、與夜牡、或)優(yōu)先級別与纽,級別越高放最后
    2) 在同運算符內(nèi)字段值數(shù)據(jù)范圍越大的查詢字段放最后

三、優(yōu)化SQL語句的若干方法

  1. WHERE 語句中塘装,小表字段寫左邊
  2. 在WHERE中盡量不要使用OR
  3. 操作符號: IN & NOT IN操作符
    NOT IN操作是強列推薦不使用的急迂,NOT IN會多次掃描表
    推薦方案:用NOT EXISTS 或(外連接+判斷為空)方案代替
    而Exists比IN更快,最慢的是NOT操作
    使用in時蹦肴,在IN后面值的列表中僚碎,將出現(xiàn)最頻繁的值放在最前面,出現(xiàn)得最少的放在最后面阴幌,這樣可以減少判斷的次數(shù)
    另外勺阐,多表連接查詢時,用IN矛双,sql會先嘗試轉(zhuǎn)換成多表連接渊抽,轉(zhuǎn)換不成功則先執(zhí)行IN里面的查詢,再查詢外層表記錄议忽。
  4. 注意union和union all的區(qū)別懒闷。union比union all多做了一步distinct操作。能用union all的情況下盡量不用union
  5. 查詢時盡量不要返回不需要的行、列愤估。另外在多表連接查詢時帮辟,盡量改成連接查詢,少用子查詢
  6. Between在某些時候比IN速度更快,Between能夠更快地找到范圍
  7. 從右到左的順序處理FROM子句中的表名玩焰,選擇數(shù)據(jù)量少的表作為基礎(chǔ)表
  8. 沒有必要時不要用DISTINCT和ORDER BY由驹,它們增加了額外的開銷
  9. 計算記錄條數(shù)
    和一般的觀點相反, count(*) 比count(1)稍快 , 當(dāng)然如果可以通過索引檢索,對索引列的計數(shù)仍舊是最快的. 例如 COUNT(CONTRACT_NO)
  10. 減少對表的查詢
  11. 使用表的別名
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市昔园,隨后出現(xiàn)的幾起案子荔棉,更是在濱河造成了極大的恐慌,老刑警劉巖蒿赢,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異渣触,居然都是意外死亡羡棵,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門嗅钻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來皂冰,“玉大人,你說我怎么就攤上這事养篓⊥毫鳎” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵柳弄,是天一觀的道長舶胀。 經(jīng)常有香客問我,道長碧注,這世上最難降的妖魔是什么嚣伐? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮萍丐,結(jié)果婚禮上轩端,老公的妹妹穿的比我還像新娘。我一直安慰自己逝变,他們只是感情好基茵,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著壳影,像睡著了一般拱层。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上态贤,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天舱呻,我揣著相機與錄音,去河邊找鬼。 笑死箱吕,一個胖子當(dāng)著我的面吹牛芥驳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播茬高,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼兆旬,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了怎栽?” 一聲冷哼從身側(cè)響起丽猬,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎熏瞄,沒想到半個月后脚祟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡强饮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年由桌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片邮丰。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡行您,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出剪廉,到底是詐尸還是另有隱情娃循,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布斗蒋,位于F島的核電站捌斧,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏泉沾。R本人自食惡果不足惜骤星,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望爆哑。 院中可真熱鬧洞难,春花似錦、人聲如沸揭朝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽潭袱。三九已至柱嫌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間屯换,已是汗流浹背编丘。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工与学, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嘉抓。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓索守,卻偏偏與公主長得像,于是被迫代替她去往敵國和親抑片。 傳聞我的和親對象是個殘疾皇子卵佛,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容