MySQL查看/修改/刪除索引


索引創建完成后,可以利用 SQL 語句查看已經存在的索引。在 MySQL 中,可以使用 SHOW INDEX 語句查看表中創建的索引。

查看索引的語法格式如下:

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 中修改索引可以通過刪除原索引,再根據需要創建一個同名的索引,從而實現修改索引的操作。

基本語法

當不再需要索引時,可以使用 DROP INDEX 語句或 ALTER TABLE 語句來對索引進行刪除。

1) 使用 DROP INDEX 語句

語法格式:

DROP INDEX <索引名> ON <表名>

語法說明如下:

  • <索引名>:要刪除的索引名。
  • <表名>:指定該索引所在的表名。

2) 使用 ALTER TABLE 語句

根據 ALTER TABLE 語句的語法可知,該語句也可以用於刪除索引。具體使用方法是將 ALTER TABLE 語句的語法中部分指定為以下子句中的某一項。

  • DROP PRIMARY KEY:表示刪除表中的主鍵。一個表只有一個主鍵,主鍵也是一個索引
  • DROP INDEX index_name:表示刪除名稱為 index_name 的索引。
  • DROP FOREIGN KEY fk_symbol:表示刪除外鍵。
注意:如果刪除的列是索引的組成部分,那么在刪除該列時,也會將該列從索引中刪除;如果組成索引的所有列都被刪除,那么整個索引將被刪除。

刪除索引

【實例 1】刪除表 tb_stu_info 中的索引,輸入的 SQL 語句和執行結果如下所示。

mysql> DROP INDEX height
    -> ON tb_stu_info;
Query OK, 0 rows affected (0.27 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> SHOW CREATE TABLE tb_stu_info\G
*************************** 1. row ***************************
       Table: tb_stu_info
Create Table: CREATE TABLE `tb_stu_info` (
  `id` int(11) NOT NULL,
  `name` char(45) DEFAULT NULL,
  `dept_id` int(11) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `height` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gb2312
1 row in set (0.00 sec)


免責聲明!

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



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