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

首頁 > 數據庫 > MySQL > 正文

Mysql索引的類型和優缺點詳解

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

索引是一種特殊的文件(InnoDB數據表上的索引是表空間的一個組成部分),它們包含著對數據表里所有記錄的引用指針。
注:
[1]索引不是萬能的!索引可以加快數據檢索操作,但會使數據修改操作變慢。每修改數據記錄,索引就必須刷新一次。為了在某種程序上彌補這一缺陷,許 多SQL命令都有一個DELAY_KEY_WRITE項。這個選項的作用是暫時制止MySQL在該命令每插入一條新記錄和每修改一條現有之后立刻對索引進 行刷新,對索引的刷新將等到全部記錄插入/修改完畢之后再進行。在需要把許多新記錄插入某個數據表的場合,DELAY_KEY_WRITE選項的作用將非 常明顯。
[2]另外,索引還會在硬盤上占用相當大的空間。因此應該只為最經常查詢和最經常排序的數據列建立索引。注意,如果某個數據列包含許多重復的內 容,為它建立索引就沒有太大的實際效果。
從理論上講,完全可以為數據表里的每個字段分別建一個索引,但MySQL把同一個數據表里的索引總數限制為16個。

1. InnoDB數據表的索引

與MyISAM數據表相比,索引對InnoDB數據的重要性要大得多。在InnoDB數據表上,索引對InnoDB數據表的重要性要在得多。在 InnoDB數據表上,索引不僅會在搜索數據記錄時發揮作用,還是數據行級鎖定機制的苊、基礎。”數據行級鎖定”的意思是指在事務操作的執行過程中鎖定正 在被處理的個別記錄,不讓其他用戶進行訪問。這種鎖定將影響到(但不限于)SELECT…LOCK IN SHARE MODE、SELECT…FOR UPDATE命令以及INSERT、UPDATE和DELETE命令。
出于效率方面的考慮,InnoDB數據表的數據行級鎖定實際發生在它們的索引上,而不是數據表自身上。顯然,數據行級鎖定機制只有在有關的數據表有一個合 適的索引可供鎖定的時候才能發揮效力。

2. 限制

如果WEHERE子句的查詢條件里有不等號(WHERE coloum != …),MySQL將無法使用索引。
類似地,如果WHERE子句的查詢條件里使用了函數(WHERE DAY(column) = …),MySQL也將無法使用索引。
在JOIN操作中(需要從多個數據表提取數據時),MySQL只有在主鍵和外鍵的數據類型相同時才能使用索引。
如果WHERE子句的查詢條件里使用比較操作符LIKE和REGEXP,MySQL只有在搜索模板的第一個字符不是通配符的情況下才能使用索引。比如說, 如果查詢條件是LIKE ‘abc%',MySQL將使用索引;如果查詢條件是LIKE ‘%abc',MySQL將不使用索引。
在ORDER BY操作中,MySQL只有在排序條件不是一個查詢條件表達式的情況下才使用索引。(雖然如此,在涉及多個數據表查詢里,即使有索引可用,那些索引在加快 ORDER BY方面也沒什么作用)
如果某個數據列里包含許多重復的值,就算為它建立了索引也不會有很好的效果。比如說,如果某個數據列里包含的凈是些諸如”0/1″或”Y/N”等值,就沒 有必要為它創建一個索引。 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 息烽县| 海门市| 淄博市| 仙桃市| 万安县| 祥云县| 阿尔山市| 农安县| 乳山市| 太和县| 桃源县| 正阳县| 德阳市| 鞍山市| 垦利县| 永靖县| 德安县| 鲁山县| 抚松县| 个旧市| 石嘴山市| 广饶县| 阜阳市| 嘉义县| 冀州市| 高青县| 星座| 大庆市| 桑植县| 安岳县| 加查县| 同仁县| 凉城县| 英德市| 镇原县| 新安县| 浦北县| 托克逊县| 江永县| 将乐县| 兴安县|