這個效果很明顯,建索引可以提公升非常大的速度;
在這裡不得不講一下普通索引和唯一性索引的區別:
普通索引
普通索引的唯一任務是加快對資料的訪問速度。因此,應該只為那些最經常出現在查詢條件(where column = )或排序條件(order by column)中的資料列建立索引。只要有可能,就應該選擇乙個資料最整齊、最緊湊的資料列(如乙個整數型別的資料列)來建立索引。
唯一索引
普通索引允許被索引的資料列包含重複的值。比如說,因為人有可能同名,所以同乙個姓名在同乙個「員工個人資料」資料表裡可能出現兩次或更多次。 如果能確定某個資料列將只包含彼此各不相同的值,在為這個資料列建立索引的時候就應該用關鍵字unique把它定義為乙個唯一索引。這麼做的好處:一是簡化了mysql對這個索引的管理工作,這個索引也因此而變得更有效率;二是mysql會在有新記錄插入資料表時,自動檢查新記錄的這個欄位的值是否已經在某個記錄的這個欄位裡出現過了;如果是,mysql將拒絕插入那條新記錄。也就是說,唯一索引可以保證資料記錄的唯一性。事實上,在許多場合,人們建立唯一索引的目的往往不是為了提高訪問速度,而只是為了避免資料出現重複。
復合索引
使用者可以在多個列上建立索引,這種索引叫做復合索引(組合索引)。 復合索引在資料庫操作期間所需的開銷更小,可以代替多個單一索引;同時有兩個概念叫做窄索引和寬索引,窄索引是指索引列為1-2列的索引,寬索引也就是索引列超過2列的索引;設計索引的乙個重要原則就是能用窄索引不用寬索引,因為窄索引往往比組合索引更有效;
當建立復合索引index(column1,column2,column3),這就相當於建立了以下三個索引:
index(column1),index(column1,column2)index(column1,column2,column3) // 跟三個欄位的順序沒有關係 比如:index(column3,column1,column2),它們是一樣的效果注意事項:
select * from table1 where col1=a and col2=b and col3=d如果使用 where col2=b and col1=a 或者 where col2=b 將不會使用索引
備註: 對一張表來說,如果有乙個復合索引 on (col1,col2),就沒有必要同時建立乙個單索引 on col1; 如果查詢條件需要,可以在已有單索引 on(col1)的情況下,新增復合索引on (col1,col2),對於效率有一定的提高 同時建立多欄位(包含5、6個字段)的復合索引沒有特別多的好處,相對而言,建立多個窄字段(僅包含乙個,或頂多2個字段)的索引可以達到更好的效率和靈活性
先查對應資料的頁,在通過頁中的資料id,到其它表中查詢需要的字段; 比如a表中有字段 aid, cola1, cola2 ,b表中有字段 bid, colb1, colb2, aid, 而需要獲取的字段有 colb1, colb2,cola1, cola2 這個時候可以這樣操作:
先將查詢條件從其它表中找出對應的id,再將id作為查詢條件,至目標表中進行查詢;
同樣是2.1中所提到的a,b表。假如查詢欄位是cola1,而需要獲取的字段是colb1, colb2 這個時候可以這樣操作:
同樣,該組查詢也只是考慮在資料量比較大的時候,對於小資料的時候,沒什麼必要。
以上僅僅是個人對資料庫中部分查詢業務的思考,希望在服務執行過程中,可以對服務的呼叫起到一定的效率提公升,如處理方式不妥之處,還請各位大大指正,共同**更好的優化方案。
關於資料庫查詢業務的幾點思考
這個效果很明顯,建索引可以提公升非常大的速度 在這裡不得不講一下普通索引和唯一性索引的區別 普通索引 普通索引的唯一任務是加快對資料的訪問速度。因此,應該只為那些最經常出現在查詢條件 where column 或排序條件 order by column 中的資料列建立索引。只要有可能,就應該選擇乙個...
提公升資料庫效能的幾點思考
提公升資料庫效能的幾點思考 1.表結構 橫拆 若表結構中欄位數目很多,且查詢時不是一次將所有字段取出的話,可以考慮根據業務分類將表拆成多表 豎拆 將表劃分成分割槽表,分割槽的原則是過濾條件的頻繁程度 2.io能力 表空間,資料檔案,分割槽資料檔案,盡可能地打散到各磁碟上,提公升io的併發能力 採用事...
關於庫介面的幾點思考
由於專案需要,我寫的服務程序要同別的程序進行通訊,目前採用的是本地socket方式。舊工程中採用介面的是直接暴露通訊格式,由服務使用者自己寫呼叫函式,封裝資料進行通訊,這會有以下幾點問題 1 使用煩瑣,每個不同的程序都需要寫自己通訊函式 建立socket,鏈結,寫入,讀出,關閉等一系列重複的操作。2...