国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

Mysql使用索引實現查詢優化

2024-07-24 12:53:54
字體:
來源:轉載
供稿:網友

索引的目的在于提高查詢效率,可以類比字典,如果要查“mysql”這個單詞,我們肯定需要定位到m字母,然后從下往下找到y字母,再找到剩下的sql。如果沒有索引,那么你可能需要把所有單詞看一遍才能找到你想要的。

1.索引的優點

假設你擁有三個未索引的表t1、t2和t3,每個表都分別包含數據列i1、i2和i3,并且每個表都包含了1000條數據行,其序號從1到1000。查找某些值匹配的數據行組合的查詢可能如下所示:

SELECT t1.i1, t2.i2, t3.i3FROM t1, t2, t3WHERE t1.i1 = t2.i2 AND t2.i1 = t3.i3;

  這個查詢的結果應該是1000行,每個數據行包含三個相等的值。如果在沒有索引的情況下處理這個查詢,那么如果我們不對這些表進行全部地掃描,我們是沒有辦法知道哪些數據行含有哪些值的。因此你必須嘗試所有的組合來查找符合WHERE條件的記錄。可能的組合的數量是1000 x 1000 x 1000(10億!),它是匹配記錄的數量的一百萬倍。這就浪費了大量的工作。這個例子顯示,如果沒有使用索引,隨著表的記錄不斷增長,處理這些表的聯結所花費的時間增長得更快,導致性能很差。我們可以通過索引這些數據表來顯著地提高速度,因為索引讓查詢采用如下所示的方式來處理:

  1.選擇表t1中的第一行并查看該數據行的值。

  2.使用表t2上的索引,直接定位到與t1的值匹配的數據行。類似地,使用表t3上的索引,直接定位到與表t2的值匹配的數據行。

  3.處理表t1的下一行并重復前面的過程。執行這樣的操作直到t1中的所有數據行都被檢查過。

  在這種情況下,我們仍然對表t1執行了完整的掃描,但是我們可以在t2和t3上執行索引查找,從這些表中直接地獲取數據行。理論上采用這種方式運行上面的查詢會快一百萬倍。當然這個例子是為了得出結論來人為建立的。然而,它解決的問題卻是現實的,給沒有索引的表添加索引通常會獲得驚人的性能提高。
-

2.索引的代價

首先,索引加快了檢索的速度,但是減慢了插入和刪除的速度,同時還減慢了更新被索引的數據列中的值的速度。也就是說,索引減慢了大多數涉及寫操作的速度。發生這種現象的原因在于寫入一條記錄的時候不但需要寫入數據行,還需要改變所有的索引。數據表帶有的索引越多,需要做出的修改就越多,平均性能的降低程度也就越大。在本文的”高效率載入數據”部分中,我們將更細致地了解這些現象并找出處理方法。

  其次,索引會花費磁盤空間,多個索引相應地花費更多的磁盤空間。這可能導致更快地到達數據表的大小限制:

  · 對于MyISAM表,頻繁地索引可能引起索引文件比數據文件更快地達到最大限制。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鲁甸县| 大安市| 加查县| 周口市| 太仓市| 竹山县| 修文县| 互助| 沐川县| 旬邑县| 济南市| 永安市| 蓬安县| 慈溪市| 师宗县| 镇赉县| 常州市| 筠连县| 旬阳县| 南康市| 泸州市| 新密市| 商南县| 靖西县| 区。| 城市| 马公市| 易门县| 外汇| 双流县| 浮梁县| 西丰县| 柳州市| 盘山县| 九龙坡区| 比如县| 南乐县| 兖州市| 伊宁市| 敦煌市| 沂源县|