91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL索引具體有哪些功能

發布時間:2020-06-01 16:32:59 來源:網絡 閱讀:546 作者:三月 欄目:MySQL數據庫

下文給大家帶來MySQL索引具體有哪些功能有關內容,相信大家一定看過類似的文章。我們給大家帶來的有何不同呢?一起來看看正文部分吧,相信看完MySQL索引具體有哪些功能你一定會有所收獲。

MySQL索引功能

1.索引的作用

  • 大大大加快數據的檢索速度和增加查詢的效率
  • 降低磁盤I/O成本
  • 保證數據記錄的唯一性
  • 使得應用于表的SQL語句執行的更快

2.索引簡述

  • 在關系數據庫中,索引是一種單獨的、物理的對數據庫表中一列或多列的值進行排序的一種存儲結構,它是某個表中一列或若干列值的集合和相應的指向表中物理標識這些值的數據頁的邏輯指針清單。索引的作用相當于圖書的目錄,可以根據目錄中的頁碼快速找到所需的內容。
  • 索引是一種特殊的文件(InnoDB 數據表上的索引是表空間的一個組成部分),它們包含著對數據表里所有記錄的引用指針。索引不是萬能的,索引可以加快數據檢索操作,但會使數據修改操作變慢。每修改數據記錄,索引就必須刷新一次。為了在某種程度上彌補這一缺陷,許多 SQL 命令都有一個 DELAY_KEY_WRITE 項。這個選項的作用是暫時制止 MySQL 在該命令每插入一條新記錄和每修改一條現有之后立刻對索引進行刷新,對索引的刷新將等到全部記錄插入/修改完畢之后再進行。在需要把許多新記錄插入某個數據表的場合,DELAY_KEY_WRITE 選項的作用將非常明顯。另外,索引還會在硬盤上占用相當大的空間。因此應該只為最經常查詢和最經常排序的數據列建立索引。注意,如果某個數據列包含許多重復的內容,為它建立索引就沒有太大的實際效果。
  • 從理論上講,完全可以為數據表里的每個字段分別建一個索引,但 MySQL 把同一個數據表里的索引總數限制為16個。

InnoDB 數據表的索引

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

3.索引的限制

  • 如果 WHERE 子句的查詢條件里有不等號(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” 等值,就沒有必要為它創建一個索引。

4.索引的分類

(1)普通索引
  • 最基本的索引類型,沒有唯一性之類的限制。
(2)唯一索引
  • 唯一索引是不允許其中任何兩行具有相同索引值的索引。

  • 當現有數據中存在重復的鍵值時,大多數數據庫不允許將新創建的唯一索引與表一起保存。數據庫還可能防止添加將在表中創建重復鍵值的新數據。例如,如果在 employee 表中職員的姓 (lname) 上創建了唯一索引,則任何兩個員工都不能同姓。

  • 對某個列建立UNIQUE索引后,插入新紀錄時,數據庫管理系統會自動檢查新紀錄在該列上是否取了重復值,在CREATE TABLE 命令中的UNIQE約束將隱式創建UNIQUE索引。
(3)主鍵索引
  • 簡稱為主索引,數據庫表中一列或列組合(字段)的值唯一標識表中的每一行。該列稱為表的主鍵。

  • 在數據庫關系圖中為表定義主鍵將自動創建主鍵索引,主鍵索引是唯一索引的特定類型。該索引要求主鍵中的每個值都唯一。當在查詢中使用主鍵索引時,它還允許對數據的快速訪問。

  • 提示盡管唯一索引有助于定位信息,但為獲得最佳性能結果,建議改用主鍵索引。
(4)候選索引
  • 與主索引一樣要求字段值的唯一性,并決定了處理記錄的順序。在數據庫和自由表中,可以為每個表建立多個候選索引。
(5)復合索引
  • 兩個或更多個列上的索引被稱作復合索引。 利用索引中的附加列,您可以縮小搜索的范圍,但使用一個具有兩列的索引不同于使用兩個單獨的索引。 不允許數據記錄出現重復值和空值。
(6)全文索引
  • 全文索引是目前實現大數據搜索的關鍵技術。 能夠利用分詞技術等多種算法智能分析出文本文字中關鍵字詞的頻率及重要性,然后按照一定的算法規則智能地篩選出我們想要的搜索結果。 用于多個列值,允許數據記錄出現重復值和空值

  • MySQL自帶的全文索引只能用于數據庫引擎為MyISAM的數據表
(7)空間索引
  • 在MySQL 5.7.4實驗室版本中, InnoDB存儲引擎新增了對于幾何數據空間索引的支持。在此之前,InnoDB將幾何數據存儲為BLOB(二進制大對象)數據,在空間數據上只能創建前綴索引,當涉及空間搜索時非常低效,尤其是在涉及復雜的幾何數據時。在大多數情況下,獲得結果的唯一方式是掃描表。 新版本MySQL中,InnoDB支持空間索引,通過R樹來實現,使得空間搜索變得高效。

5.索引的使用

(1)創建索引
create [unique | fulltext | spatial] index 索引名 on 表名(字段)

詳解

unique:唯一索引

fulltext:全文索引,InnoDB不支持FULLTEXT類型的索引

spatial:空間索引

案例

mysql> create index hehe_1 on hehe.user(user_name);     //user表中user_name字段新建普通索引

mysql> create unique index hehe_2 on hehe.user(user_passwd);    //user表中user_passwd字段新建唯一索引

mysql> create index hehe_3 on hehe.user(user_name,user_passwd);

//user表中user_name、user_passwd字段組合為復合索引

(2)查看索引
show index from 數據庫名.表名;
(3)刪除索引

drop index 索引名 on 數據庫名.表名;

對于上文關于MySQL索引具體有哪些功能,大家覺得是自己想要的嗎?如果想要了解更多相關,可以繼續關注我們的行業資訊板塊。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

怀安县| 北海市| 桐城市| 满城县| 海淀区| 西峡县| 霍城县| 洛南县| 乳山市| 武宁县| 尼玛县| 商南县| 夏津县| 霍林郭勒市| 北京市| 镇江市| 苍南县| 沁水县| 含山县| 雷波县| 油尖旺区| 高清| 南漳县| 岳西县| 玉溪市| 盘山县| 海丰县| 于都县| 赫章县| 济南市| 澎湖县| 镇赉县| 金湖县| 乌恰县| 绥德县| 西平县| 大名县| 平利县| 石楼县| 隆安县| 唐海县|