日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Mysql索引基本概念及案例总结(含索引的使用注意事项)

發布時間:2024/9/27 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mysql索引基本概念及案例总结(含索引的使用注意事项) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Mysql索引基本概念及案例總結

鍵(Key)與索引(Index)關鍵字的區別

索引是鍵的列表,當我們定義一個key(外鍵除外,一般是PRIMARY KEY或者KEY形式)時就會產生對應的索引。一般情況下KEY和INDEX關鍵字可以互換。

唯一索引的說明

唯一索引是只允許索引中每個值只能對應一行的索引。這里唯一分兩層含義,在用戶層對應唯一約束,即不能將重復的值插入定義為唯一的字段里,而對于數據庫而言唯一性對應的是唯一索引檢查字段的不重復性。

特別的:對于字段允許為NULL的唯一索引,NULL可以多次插入進去,而不被認為是重復的數據。

主鍵Primary Key的說明

唯一表的主鍵是定義行唯一性的索引,對于主鍵而言,NULL值是不被允許的,即它不能插入到定義為主鍵的字段里。實際上表里任意定義為Unique索引的列就可以作為表的主鍵,但一般選擇其中不經常變的字段。

在InnoDB里主鍵有特殊的用途,在數據庫復制時通過主鍵可以檢測到每一行變化時的時間戳。在組復制(GROUP Replication)時一般明確要求表有主鍵或者有唯一索引。

sql_require_primary_key選項是強制表有主鍵,默認時沒有這個要求(即表必須得有主鍵)。

次(輔助)索引Secondary Indexes的說明

輔助索引是相對于主鍵而言的,除主鍵之外的唯一索引或者普通索引都叫做輔助索引。

聚集索引

在InnoDB里將行數據存儲于B樹索引(B-tree)的葉子頁內的索引叫做聚集索引。因為索引的值聚集在一起,所有有了聚集索引這個名字。主鍵就是用于做聚集索引的。特別的,如果沒有給表設定主鍵,那么InnoD引擎會找唯一不為NULL值的索引作為“主鍵”。如果還是找不到,那么InnoD引擎會加一個隱藏的6字節自增整數,該值相對于InnoD引擎里的所有表都是唯一的。

覆蓋索引

覆蓋索引又稱之為索引的命中,即可我們給出的查詢里所有的字段都被索引覆蓋(命中)。比如一個查詢:

SELECT deptno,deptname FROM dept -- 這里的兩個字段deptno和deptname都能通過某個索引查詢的到,則成為索引命中。

這里的兩個字段deptno和deptname都能通過某個索引查詢的到,則成為索引命中。

索引的限制

  • 在數據庫頁大小是16k時,B-tree索引的最大寬度(索引字段里定義的長度)為3072字節(DYNAMIC、COMPRESSED)、767字節(REDUNDANT 、 COMPACT),其中DYNAMIC、COMPRESSED、REDUNDANT 、 COMPACT是InnoDB里的4中行格式。同理如果當前數據庫頁為8k則DYNAMIC、COMPRESSED行格式下索引最大為1536字節。
  • 當指定了索引字段的長度時,Blob或者Text只能在非全文索引的索引中使用。
  • 一個表只能對1017個字段設置功能鍵(唯一、外鍵等)。
  • 一個表只能有64個輔助索引。
  • 一個表設置復合索引或功能鍵時最多只能包含16個字段。
  • 關于行格式:表的行格式決定了記錄行是物理存儲的形式,同時它也影響到查詢以及數據操作時的效率。如果更多的行填充到磁盤頁里,那么查詢或者索引查找時將更快,數據緩存池里將使用更少緩存,同時也會有更少的I/O讀寫操作。

    常見的行格式有:REDUNDANT,?COMPACT,?DYNAMIC, and?COMPRESSED.

    行格式

    壓縮存儲特點

    增強的變長列存儲

    大索引鍵前綴支持

    壓力支持

    支持的表空間類型

    REDUNDANT

    system, file-per-table, general

    COMPACT

    system, file-per-table, general

    DYNAMIC

    system, file-per-table, general

    COMPRESSED

    file-per-table, general

    詳細可見:MySQL :: MySQL 8.0 Reference Manual :: 15.10 InnoDB Row Formats

    https://dev.mysql.com/doc/refman/8.0/en/create-index.htmlhttps://dev.mysql.com/doc/refman/8.0/en/create-index.html

    代碼驗證

    創建表時指定索引

    CREATE TABLE people ( id int unsigned NOT NULL, name varchar(50), birthdate date NOT NULL, location point NOT NULL SRID 4326, description text, PRIMARY KEY (id), INDEX (name), SPATIAL INDEX (location), FULLTEXT INDEX (description) );

    注:

  • 創建表時指定了唯一索引。
  • 指定了Name字段的輔助索引。
  • 指定以Location字段對應的坐標索引。
  • 指定了文本(text)類型的Description字段對應的全文索引。
  • 總結

    以上是生活随笔為你收集整理的Mysql索引基本概念及案例总结(含索引的使用注意事项)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。