關於數據庫查詢業務的幾點思考


一、對查詢字段建索引;

這個效果很明顯,建索引能夠提高很是大的速度;html

在這裏不得不講一下普通索引和惟一性索引的區別:數據庫

  1. 普通索引編程

  普通索引的惟一任務是加快對數據的訪問速度。所以,應該只爲那些最常常出如今查詢條件(WHERE column = )或排序條件(ORDER BY column)中的數據列建立索引。只要有可能,就應該選擇一個數據最整齊、最緊湊的數據列(如一個整數類型的數據列)來建立索引。app

  1. 惟一索引編程語言

  普通索引容許被索引的數據列包含重複的值。好比說,由於人有可能同名,因此同一個姓名在同一個「員工我的資料」數據表裏可能出現兩次或更屢次。 若是能肯定某個數據列將只包含彼此各不相同的值,在爲這個數據列建立索引的時候就應該用關鍵字UNIQUE把它定義爲一個惟一索引。這麼作的好處:一是簡化了MySQL對這個索引的管理工做,這個索引也所以而變得更有效率;二是MySQL會在有新記錄插入數據表時,自動檢查新記錄的這個字段的值是否已經在某個記錄的這個字段裏出現過了;若是是,MySQL將拒絕插入那條新記錄。也就是說,惟一索引能夠保證數據記錄的惟一性。事實上,在許多場合,人們建立惟一索引的目的每每不是爲了提升訪問速度,而只是爲了不數據出現重複。學習

  1. 複合索引大數據

    用戶能夠在多個列上創建索引,這種索引叫作複合索引(組合索引)。 複合索引在數據庫操做期間所需的開銷更小,能夠代替多個單一索引;同時有兩個概念叫作窄索引和寬索引,窄索引是指索引列爲1-2列的索引,寬索引也就是索引列超過2列的索引;設計索引的一個重要原則就是能用窄索引不用寬索引,由於窄索引每每比組合索引更有效;優化

當創建複合索引index(column1,column2,column3),這就至關於創建瞭如下三個索引:人工智能

index(column1),index(column1,column2)index(column1,column2,column3)  // 跟三個字段的順序沒有關係   好比:index(column3,column1,column2),它們是同樣的效果

注意事項:spa

  • 對於複合索引,在查詢使用時,最好將條件順序按照索引的順序,這樣效率最高;

select * from table1 where col1=A AND col2=B AND col3=D

若是使用 where col2=B AND col1=A 或者 where col2=B 將不會使用索引

  • 什麼時候使用複合索引
    根據where條件建索引是極其重要的一個原則; 注意不要過多用索引,不然對錶更新的效率有很大的影響,由於在操做表的時候要化大量時間花在建立索引中

  • 複合索引會替代單一索引麼
    若是索引知足窄索引的狀況下能夠創建複合索引,這樣能夠節約空間和時間

備註: 對一張表來講,若是有一個複合索引 on (col1,col2),就沒有必要同時創建一個單索引 on col1; 若是查詢條件須要,能夠在已有單索引 on(col1)的狀況下,添加複合索引on (col1,col2),對於效率有必定的提升 同時創建多字段(包含五、6個字段)的複合索引沒有特別多的好處,相對而言,創建多個窄字段(僅包含一個,或頂多2個字段)的索引能夠達到更好的效率和靈活性

二、不要連表查詢

2.1 如何處理不在表中的字段的展現?

先查對應數據的頁,在經過頁中的數據id,到其它表中查找須要的字段; 好比A表中有字段 Aid, colA1, colA2 ,B表中有字段 Bid, colB1, colB2, Aid, 而須要獲取的字段有 colB1, colB2,colA1, colA2 這個時候能夠這樣操做:

  • 第一步:根據查詢條件獲取B表中的數據 Bid, coldB1, colB2, Aid

  • 第二步:根據獲取到的Aid,從A表中獲取另外兩列colA1, colA2 儘可能獲取數據的方式沒有連表查詢來的簡單,但能夠在大數據量的時候,減小查詢或者傳輸數據所消耗的時間,尤爲是在分頁查詢的時候。

2.2 如何處理在查詢條件中的字段?

先將查詢條件從其它表中找出對應的id,再將id做爲查詢條件,至目標表中進行查詢;

一樣是2.1中所提到的A,B表。假如查詢字段是colA1,而須要獲取的字段是colB1, colB2 這個時候能夠這樣操做:

  • 第一步:根據colA1,線從A表中獲取對應的數據Aid字段(當查詢前已經能夠肯定Aid時,該步驟能夠省略,這步更適合colA1是做爲模糊查詢呢的條件進行查詢的狀況)

  • 第二步:根據Aid字段,從B表中獲取所須要的字段colB1,colB2

一樣,該組查詢也只是考慮在數據量比較大的時候,對於小數據的時候,沒什麼必要。

2.3 其它減小連表查詢的方法

  • 提供冗餘字段,即將A表中須要展現的字段,提早放入B表中,兩邊各存一份,這會增長維護和更新的成本,但能夠避免連表查詢,能夠視業務場景考慮使用

3 結尾

以上僅僅是我的對數據庫中部分查詢業務的思考,但願在服務運行過程當中,能夠對服務的調用起到必定的效率提高,如處理方式不妥之處,還請各位大大指正,共同探討更好的優化方案。


本文來自網易雲社區 ,經做者王飛受權發佈。

網易雲免費體驗館,0成本體驗20+款雲產品!

更多網易研發、產品、運營經驗分享請訪問網易雲社區


相關文章:
【推薦】 網易雲社區開年活動:人工智能熱門圖書大抽獎!
【推薦】 6本互聯網技術暢銷書免費送(數據分析、深度學習、編程語言)!

相關文章
相關標籤/搜索