欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

mysql 分頁 查詢,為什么查詢使用索引就會快

錢浩然2年前21瀏覽0評論
mysql 分頁 查詢,為什么查詢使用索引就會快?

這個問題和線性查詢、二分查詢是有很大關系的。索引后的數據可以使用二分法查詢,未索引的數據查詢需要線性查詢。下面詳細說一下這兩者之間的性能區別。

1、兩者的查詢原理

①、線性查詢

線性查詢又稱順序查詢,它的查詢原理就是從第一條記錄開始,逐個比較要查找的字段,直到字段內容和查找值相等,則查找成功,返回結果。若比較結果與字段所有記錄都不等,則查找失敗。下面舉例說明:

需要在某個記錄數為N的數組a[]中查找元素k,那么,線性查詢就是從a[1]開始和k進行對比,對比相等則返回a[i],如果,不相等則繼續下一個查詢, i=i+1。直到 i=N為止。那線性查詢的性能就一目了然:

最好的情況就是對比1次就找到結果。最差的情況就是需要對比N次才能找到結果。平均計算,就是N/2次能找到結果。

②、二分查詢

二分法查詢也可以說是分段查詢。主要原理就是對已經排序的一組數據進行中間分段,中間分界點和查詢值對比。如果數值小于分界點,則要查找的數落在前半段;如果數字大于分界點,則要查找的數落在前半段;如果等于分界點,則要查找數就已經找到。下面同樣舉例說明:

需要在某個記錄數為N且已經排好序的數組a[]中查找元素K,那么,二分查詢首先是確定數組的中點a[x],其實也就是a[N/2]這個值(N/2采用進一法取整)。然后對比a[x]和K值,按照前面的方法循環縮小對比的區間,最終找到想要的值。二分查詢的性能如下:

二分法查詢N條記錄需要log2(N)次對比就能找到結果。前提是:數組必須要排好序

★從上面兩種查詢法原理可以看到,當數組N比較大時,二分查詢的查詢性能明顯優于線性查詢。當數組N較小時,則線性查詢的性能更好,因為它少了求中值的開銷。

2、索引給數據庫查詢帶來的性能變化

數據庫中建立索引其實就是對數據庫表中一列或多列的值進行排序的結構。其實就是為了給二分查詢做好排序的前提。結合前面兩種查詢的原理,我們就很容易理解數據庫中索引變快的原因了。其實,數據庫通常情況下,數據量都是比較大的,一般都是上萬條,甚至達到億級記錄。我們用前面原理中的公式計算對比一下:

在10萬條記錄中查找一個值:那么,N=100000;線性查詢性能=N/2,計算可得,平均需要對比50000次;二分查詢性能=log2(N),計算可得,大約需要17次;

從上面計算對比,我們可以看到,索引好了用二分查詢的性能會比線性查詢快非常多。

3、數據庫哪里應該加索引

雖然加了索引后,查詢性能提升很多。但是在數據庫里面也是不所有字段都加索引的,因為,數據庫的整體性能不僅需要考慮查詢性能,還需要考慮寫入性能。當你在數據庫中某個字段加入索引后,該字段就需要建立對應的索引指針。每次新寫入或者修改字段的記錄,都需要額外寫入索引指針。所以,在數據庫中,加入索引會加快搜索性能,但也會相應降低一點點寫入性能。所以,數據庫中建立索引一般在以下幾種情況建立索引。

經常需要搜索的列,增加索引可以加快搜索速度;作為主鍵的列,強制該列的唯一性和組織表中數據的排列結構;在經常用在連接的列上,這些列主要是一些外鍵,可以加快連接的速度;在經常需要根據范圍進行搜索的列上創建索引,因為索引已經排序,其指定的范圍是連續的在經常需要排序的列上創建索引,因為索引已經排序,這樣查詢可以利用索引的排序,加快排序查詢時間在經常使用在WHERE子句中的列上面創建索引,加快條件的判斷速度

總結

總之,數據庫中因為存在大量的數據,建立索引相當于對數據進行了排序,可以使用二分查詢法來查詢數據,確實會大大提高查詢的速度。但是也會相應降低一點點寫入的速度,所以,數據庫中的索引也是有針對性的建立索引的。

感謝閱讀!我是數智風,用經驗回答問題,歡迎評論關注。