本文目錄一覽:
- 1、mysql索引
- 2、mysql如何建立索引
- 3、Mysql-多表查詢as索引
mysql索引
在mysql中,索引是一種特殊的資料庫結構,由數據表中的一列或多列組合而成,可以用來快速查詢數據表中有某一特定值的記錄。
通過索引,查詢數據時不用讀完記錄的所有信息,而只是查詢索引列即可。
通過索引,查詢數據時不用讀完記錄的所有信息,而只是查詢索引列。否則,資料庫系統將讀取每條記錄的所有信息進行匹配。
可以把索引比作新華字典的音序表。例如,要查「庫」字,如果不使用音序,就需要從字典的 400 頁中逐頁來找。但是,如果提取拼音出來,構成音序表,就只需要從 10 多頁的音序表中直接查找。這樣就可以大大節省時間。
因此,使用索引可以很大程度上提高資料庫的查詢速度,還有效的提高了資料庫系統的性能。
索引的優缺點
索引有其明顯的優勢,也有其不可避免的缺點。
優點
索引的優點如下:
1、通過創建唯一索引可以保證資料庫表中每一行數據的唯一性。
2、可以給所有的 MySQL 列類型設置索引。
3、可以大大加快數據的查詢速度,這是使用索引最主要的原因。
4、在實現數據的參考完整性方面可以加速表與表之間的連接。
5、在使用分組和排序子句進行數據查詢時也可以顯著減少查詢中分組和排序的時間
缺點
增加索引也有許多不利的方面,主要如下:
1、創建和維護索引組要耗費時間,並且隨著數據量的增加所耗費的時間也會增加。
2、索引需要佔磁碟空間,除了數據表占數據空間以外,每一個索引還要佔一定的物理空間。如果有大量的索引,索引文件可能比數據文件更快達到最大文件尺寸。
3、當對表中的數據進行增加、刪除和修改的時候,索引也要動態維護,這樣就降低了數據的維護速度。
使用索引時,需要綜合考慮索引的優點和缺點。
mysql如何建立索引
我們可以通過查看索引的屬性來判斷創建索引的方法。
查看索引的語法格式如下:
SHOW INDEX FROM 表名 [ FROM 資料庫名]
語法說明如下:
表名:指定需要查看索引的數據表名。
資料庫名:指定需要查看索引的數據表所在的資料庫,可省略。比如,SHOW INDEX FROM student FROM test; 語句表示查看 test 資料庫中 student 數據表的索引。
示例
使用 SHOW INDEX 語句查看《MySQL創建索引》一節中 tb_stu_info2 數據表的索引信息,SQL 語句和運行結果如下所示。
mysql SHOW INDEX FROM tb_stu_info2\G
1. row
Table: tb_stu_info2
Non_unique: 0
Key_name: height
Seq_in_index: 1
Column_name: height
Collation: A
Cardinality: 0
Sub_part: NULL
Packed: NULL
Null: YES
Index_type: BTREE
Comment:
Index_comment:
1 row in set (0.03 sec)
其中各主要參數說明如下:
參數 說明
Table 表示創建索引的數據表名,這裡是 tb_stu_info2 數據表。
Non_unique 表示該索引是否是唯一索引。若不是唯一索引,則該列的值為 1;若是唯一索引,則該列的值為 0。
Key_name 表示索引的名稱。
Seq_in_index 表示該列在索引中的位置,如果索引是單列的,則該列的值為 1;如果索引是組合索引,則該列的值為每列在索引定義中的順序。
Column_name 表示定義索引的列欄位。
Collation 表示列以何種順序存儲在索引中。在 MySQL 中,升序顯示值「A」(升序),若顯示為 NULL,則表示無分類。
Cardinality 索引中唯一值數目的估計值。基數根據被存儲為整數的統計數據計數,所以即使對於小型表,該值也沒有必要是精確的。基數越大,當進行聯合時,MySQL 使用該索引的機會就越大。
Sub_part 表示列中被編入索引的字元的數量。若列只是部分被編入索引,則該列的值為被編入索引的字元的數目;若整列被編入索引,則該列的值為 NULL。
Packed 指示關鍵字如何被壓縮。若沒有被壓縮,值為 NULL。
Null 用於顯示索引列中是否包含 NULL。若列含有 NULL,該列的值為 YES。若沒有,則該列的值為 NO。
Index_type 顯示索引使用的類型和方法(BTREE、FULLTEXT、HASH、RTREE)。
Comment 顯示評註。
Mysql-多表查詢as索引
方法
(1) 根據需求找到關聯表
(2)找到關聯條件
重點的表tables
* 需求1:統計world庫下有幾個表
需求2:統計所有庫下表的個數
需求3:統計每個庫的總數據大小
–單表占空間:AVG_ROW_LENGTH*TABLE_ROWS+INDEX_LENGTH
什麼使索引:索引其實就是一種演算法
BTree
HASH
Rtree
Fulltext
輔助索引
輔助索引只提取索引列作為葉子節點
聚集索引
聚集索引提取整行數據作為葉子節點
1、輔助索引和聚集索引最大的區別就在於葉子節點,枝節點和根節點原理相同
2、輔助索引會記錄主鍵值,一般情況(除等值查詢),最終都會通過聚集索引(主鍵)來找到需要的數據
第二種
一般經常用來查詢的列作為索引
索引可以有多個,但是索引名不可重名
第一種:單列索引
第二種:前綴索引
前綴索引只能應用到字元串列,數字列不能用前綴索引
聯合索引說明:如果在一個表內對A、B、C三個列創建聯合索引那麼創建索引將按照如下情況創建索引表:
A
AB
ABC
======================================================
(1)查詢列無索引
(2)語句不符合走走索引條件
(3)需要查看全表
即把有索引的列全便利一遍
、 、 =、 =、 like、 between and 在範圍掃描中,這些會受到B+tree索引葉子節點上額外的優化,因為這些是連續取值的
or、in 這兩個不是連續的取值,所以不能受到B+tree索引的額外優化,使用時相當於Btree索引
!=、 not in 只有在主鍵列才走索引也是range級別
(1)、 、 =、 =、 like、 between and
(2)or、in
(3)!=、 not in
多表連接查詢,非驅動表連接條件是主鍵或唯一鍵
一般多表查詢的時,最左側的表為驅動表,右側的為非驅動表,下邊的例子中country標為非驅動表
7.1.1 數字類型
7.1.2 字元串類型:
字符集
中文
gbk 2位元組
utf8 3位元組
utf8mb4 4位元組
utf8mb4 為例:
舉例(1)聯合索引等值查詢
舉例(2) 聯合索引中有不等值查詢
如果Extra列出現Using temporary、Using filesort,兩項內容,那麼考慮以下語句的問題。
group by
order by
distinct
join on
union
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/232483.html