MySQL 操作命令梳理(1)-- 索引


 

1、創建索引
索引的創建可以在CREATE TABLE語句中進行,也可以單獨用CREATE INDEX或ALTER TABLE來給表增加索引。以下命令語句分別展示了如何創建主鍵索引(PRIMARY KEY),聯合索引(UNIQUE)和普通索引(INDEX)的方法。

mysql>ALTER TABLE 表名 ADD INDEX 索引名 列名;
mysql>ALTER TABLE 表名 ADD UNIQUE 索引名 列名;
mysql>ALTER TABLE 表名 ADD PRIMARY KEY 索引名 列名;
mysql>CREATE INDEX 索引名 ON 表名 列名;
mysql>CREATE UNIQUE INDEX 索引名 ON 表名 列名;
例如:
mysql>ALTER TABLE `article` ADD INDEX `id`;               //給article表增加id索引
或者:
mysql>ALTER TABLE `article` ADD INDEX (`id`,`order_id`);         //給article表增加id索引,order_id索引

2、重建索引
重建索引在常規的數據庫維護操作中經常使用。在數據庫運行了較長時間后,索引都有損壞的可能,這時就需要重建。對數據重建索引可以起到提高檢索效率。

mysql> REPAIR TABLE 表名 QUICK;

3、查詢數據表索引
MySQL查詢表索引命令的有兩種命令形式:

mysql> SHOW INDEX FROM 表名;
或者:
mysql> SHOW keys FROM 表名;

比如:

mysql> SHOW INDEX FROM uc_member;
+-----------+------------+---------------------+--------------+-----------------+-----------+-------------+----------+--------+------+------------+---------+
| Table     | Non_unique | Key_name            | Seq_in_index | Column_name     | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+-----------+------------+---------------------+--------------+-----------------+-----------+-------------+----------+--------+------+------------+---------+
| uc_member |          0 | PRIMARY             |            1 | member_id       | A         |        1099 |     NULL | NULL   |      | BTREE      |         |
| uc_member |          1 | idx_nickname_passwd |            1 | member_nickname | A         |         549 |     NULL | NULL   |      | BTREE      |         |
| uc_member |          1 | idx_nickname_passwd |            2 | member_password | A         |        1099 |     NULL | NULL   |      | BTREE      |         |
| uc_member |          1 | member_mobile       |            1 | member_mobile   | A         |        1099 |     NULL | NULL   |      | BTREE      |         |
+-----------+------------+---------------------+--------------+-----------------+-----------+-------------+----------+--------+------+------------+---------+
4 rows in set (0.00 sec)

解釋:
Non_unique 如果索引不能包括重復詞,則為0。如果可以,則為1。
Key_name 索引的名稱。
Seq_in_index 索引中的列序列號,從1開始。
Column_name 列名稱。
Collation 列以什么方式存儲在索引中。在MySQL中,有值‘A'(升序)或NULL(無分類)。
Cardinality 索引中唯一值的數目的估計值。通過運行ANALYZE TABLE或myisamchk -a可以更新。基數根據被存儲為整數的統計數據來計數,所以即使對於小型表,該值也沒有必要是精確的。基數越大,當進行聯合時,MySQL使用該索引的機 會就越大。
Sub_part 如果列只是被部分地編入索引,則為被編入索引的字符的數目。如果整列被編入索引,則為NULL。
Packed 指示關鍵字如何被壓縮。如果沒有被壓縮,則為NULL。
Null 如果列含有NULL,則含有YES。如果沒有,則該列含有NO。
Index_type 用過的索引方法(BTREE, FULLTEXT, HASH, RTREE)。

4、刪除索引
刪除索引可以使用ALTER TABLE或DROP INDEX語句來實現。
DROP INDEX可以在ALTER TABLE內部作為一條語句處理,其格式如下:

mysql>DROP index 索引名 ON 表名 列名;
mysql>ALTER TABLE 表名 DROP INDEX 索引名 列名;
mysql>ALTER TABLE 表名 DROP UNIQUE 索引名 列名;
mysql>ALTER TABLE 表名 DROP PRIMARY KEY 索引名 列名;

在上面前三條語句中,都刪除了table_name中的索引index_name。
而在最后一條語句中,只在刪除PRIMARY KEY索引中使用,因為一個表只可能有一個PRIMARY KEY索引,因此也可不指定索引名。
如果沒有創建PRIMARY KEY索引,但表具有一個或多個UNIQUE索引,則MySQL將刪除第一個UNIQUE索引。
如果從表中刪除某列,則索引會受影響。對於多列組合的索引,如果刪除其中的某列,則該列也會從索引中刪除。
如果刪除組成索引的所有列,則整個索引將被刪除。

---------------------------------------索引、主鍵、唯一索引、聯合索引梳理--------------------------------------------
說下Mysql索引概念:
索引就好比一本書的目錄,它會讓你更快的找到內容,顯然目錄(索引)並不是越多越好,假如這本書1000頁,有500也是目錄,它當然效率低,目錄是要占紙張的,而索引是要占磁盤空間的。

Mysql索引主要有兩種結構:hash和B+樹:
hash:hsah索引在mysql比較少用,他以把數據的索引以hash形式組織起來,因此當查找某一條記錄的時候,速度非常快.當時因為是hash結構,每個鍵只對應一個值,而且是散列的方式分布.所以他並不支持范圍查找和排序等功能.
B+樹:b+tree是mysql使用最頻繁的一個索引數據結構,數據結構以平衡樹的形式來組織,因為是樹型結構,所以更適合用來處理排序,范圍查找等功能.相對hash索引,B+樹在查找單條記錄的速度雖然比不上hash索引,但是因為更適合排序等操作,所以他更受用戶的歡迎.畢竟不可能只對數據庫進行單條記錄的操作.

Mysql常見索引有:主鍵索引、唯一索引、普通索引、全文索引、組合索引

PRIMARY KEY(主鍵索引):    ALTER TABLE 表名 ADD PRIMARY KEY 列名
UNIQUE(唯一索引):     ALTER TABLE 表名 ADD UNIQUE 列名
INDEX(普通索引):    ALTER TABLE 表名 ADD INDEX 索引名 列名
FULLTEXT(全文索引):  ALTER TABLE 表名 ADD FULLTEXT 列名
組合索引:ALTER TABLE 表名 ADD INDEX 索引名 (列名1,列名2, 列名3)

Mysql各種索引區別:
普通索引:最基本的索引,沒有任何限制
唯一索引:與"普通索引"類似,不同的就是:索引列的值必須唯一,但允許有空值。
主鍵索引:它 是一種特殊的唯一索引,不允許有空值。
全文索引:僅可用於 MyISAM 表,針對較大的數據,生成全文索引很耗時好空間。
組合索引:為了更多的提高mysql效率可建立組合索引,遵循”最左前綴“原則。

索引是一種特殊的文件(InnoDB數據表上的索引是表空間的一個組成部分),它們包含着對數據表里所有記錄的引用指針。
普通索引(由關鍵字KEY或INDEX定義的索引)的唯一任務是加快對數據的訪問速度。

普通索引允許被索引的數據列包含重復的值。如果能確定某個數據列將只包含彼此各不相同的值,在為這個數據列創建索引的時候就應該用關鍵字UNIQUE把它定義為一個唯一索引。也就是說,唯一索引可以保證數據記錄的唯一性。

主鍵,是一種特殊的唯一索引,在一張表中只能定義一個主鍵索引,主鍵用於唯一標識一條記錄,使用關鍵字 PRIMARY KEY 來創建。
索引可以覆蓋多個數據列,如像INDEX(columnA, columnB)索引,這就是聯合索引。

主鍵分為復合主鍵和聯合主鍵
復合主鍵就是指你表的主鍵含有一個以上的字段組成 。
例如:

create table test 
( 
name varchar(19), 
id number, 
value varchar(10), 
primary key (id,name) 
) 

上面的id和name字段組合起來就是你test表的復合主鍵 (若其一為單索引字段時,左邊的id才會有索引)
它的出現是因為你的name字段可能會出現重名,所以要加上ID字段這樣就可以保證你記錄的唯一性
一般情況下,主鍵的字段長度和字段數目要越少越好。

聯合主鍵,顧名思義就是多個主鍵聯合形成一個主鍵組合,體現在聯合。
(主鍵原則上是唯一的,別被唯一值所困擾。)
索引可以極大的提高數據的查詢速度,但是會降低插入、刪除、更新表的速度,因為在執行這些寫操作時,還要操作索引文件。

舉一個簡單的例子
主鍵A跟主鍵B組成聯合主鍵
主鍵A跟主鍵B的數據可以完全相同(困擾吧,沒關系),聯合就在於主鍵A跟主鍵B形成的聯合主鍵是唯一的。
下例主鍵A數據是1,主鍵B數據也是1,聯合主鍵其實是11,這個11是唯一值,絕對不充許再出現11這個唯一值。(這就是多對多關系)
主鍵A數據 主鍵B數據
1      1
2      2
3      3
主鍵A與主鍵B的聯合主鍵值最多也就是
11
12
13
21
22
23
31
32
33


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM