MySQL創(chuàng)建索引需要了解的
:
在 MySQL 中,基本上每個表都會有索引,有時候也需要根據不同的業(yè)務場景添加不同的索引。索引的建立對于數(shù)據庫高效運行是很重要的,本篇文章將介紹下創(chuàng)建索引相關知識及注意事項。
1.創(chuàng)建索引方法
創(chuàng)建索引可以在建表時指定,也可以建表后使用 alter table 或 create index 語句創(chuàng)建索引。下面展示下幾種常見的創(chuàng)建索引場景。
#建表時指定索引 CREATETABLE`t_index`( `increment_id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'自增主鍵', `col1`int(11)NOTNULL, `col2`varchar(20)NOTNULL, `col3`varchar(50)NOTNULL, `col4`int(11)NOTNULL, `col5`varchar(50)NOTNULL, PRIMARYKEY(`increment_id`), UNIQUEKEY`uk_col1`(`col1`), KEY`idx_col2`(`col2`) )ENGINE=InnoDBDEFAULTCHARSET=utf8COMMENT='測試索引'; #創(chuàng)建索引(兩種方法) #普通索引 altertable`t_index`addindexidx_col3(col3); createindexidx_col3ont_index(col3); #唯一索引 altertable`t_index`adduniqueindexuk_col4(col4); createuniqueindexuk_col4ont_index(col4); #聯(lián)合索引 altertable`t_index`addindexidx_col3_col4(col3,col4); createindexidx_col3_col4ont_index(col3,col4); #前綴索引 altertable`t_index`addindexidx_col5(col5(20)); createindexidx_col5ont_index(col5(20)); #查看表索引 mysql>showindexfromt_index; +---------+------------+----------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ |Table|Non_unique|Key_name|Seq_in_index|Column_name|Collation|Cardinality|Sub_part|Packed|Null|Index_type|Comment|Index_comment| +---------+------------+----------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ |t_index|0|PRIMARY|1|increment_id|A|0|NULL|NULL||BTREE||| |t_index|0|uk_col1|1|col1|A|0|NULL|NULL||BTREE||| |t_index|1|idx_col2|1|col2|A|0|NULL|NULL||BTREE||| |t_index|1|idx_col3|1|col3|A|0|NULL|NULL||BTREE||| +---------+------------+----------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
2.創(chuàng)建索引所需權限
如果你用的不是 root 賬號,那創(chuàng)建索引就要考慮權限問題了,是不是需要 create、alter 權限就行了呢?下面我們來具體看下。
#測試用戶的權限 mysql>showgrants; +-------------------------------------------------------------------------------------+ |Grantsfortestuser@%| +-------------------------------------------------------------------------------------+ |GRANTUSAGEON*.*TO'testuser'@'%'| |GRANTSELECT,INSERT,UPDATE,DELETE,CREATE,ALTERON`testdb`.*TO'testuser'@'%'| +-------------------------------------------------------------------------------------+ #altertable方式創(chuàng)建索引 mysql>altertable`t_index`addindexidx_col2(col2); QueryOK,0rowsaffected(0.05sec) Records:0Duplicates:0Warnings:0 #createindex方式創(chuàng)建索引 mysql>createindexidx_col3ont_index(col3); ERROR1142(42000):INDEXcommanddeniedtouser'testuser'@'localhost'fortable't_index' #createindex方式創(chuàng)建索引還需要index權限賦予index權限后再執(zhí)行 mysql>createindexidx_col3ont_index(col3); QueryOK,0rowsaffected(0.04sec) Records:0Duplicates:0Warnings:0
從上面測試可以看出,使用 alter table 方式創(chuàng)建索引需要 alter 權限,使用 create index 方式創(chuàng)建索引需要 index 權限。
另外說明下,刪除索引也是可以使用 alter table `tb_name` drop index xxx 和 drop index xxx on tb_name 兩種方式,分別需要 alter 和 index 權限。
索引的優(yōu)點顯而易見是可以加速查詢,但創(chuàng)建索引也是有代價的。首先每建立一個索引都要為它建立一棵B+樹,會占用額外的存儲空間;其次當對表中的數(shù)據進行增加、刪除、修改時,索引也需要動態(tài)的維護,降低了數(shù)據的維護速度。所以我們創(chuàng)建索引時還是需要根據業(yè)務來考慮的,一個表中建議不要加過多索引。
以上就是MySQL創(chuàng)建索引需要了解的的詳細內容,更多關于MySQL創(chuàng)建索引的資料請關注本站其它相關文章!
版權聲明:本站文章來源標注為YINGSOO的內容版權均為本站所有,歡迎引用、轉載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網站,禁止在非www.sddonglingsh.com所屬的服務器上建立鏡像,否則將依法追究法律責任。本站部分內容來源于網友推薦、互聯(lián)網收集整理而來,僅供學習參考,不代表本站立場,如有內容涉嫌侵權,請聯(lián)系alex-e#qq.com處理。