程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MYSQL入門學習之九:索引的簡單操作

MYSQL入門學習之九:索引的簡單操作

編輯:MySQL綜合教程

MYSQL入門學習之九:索引的簡單操作   相關鏈接: MYSQL入門學習之一:基本操作 http://www.BkJia.com/database/201212/173868.html MYSQL入門學習之二:使用正則表達式搜索 http://www.BkJia.com/database/201212/173869.html MYSQL入門學習之三:全文本搜索 http://www.BkJia.com/database/201212/173873.html MYSQL入門學習之四:MYSQL的數據類型 http://www.BkJia.com/database/201212/175536.html MYSQL入門學習之五:MYSQL的字符集 http://www.BkJia.com/database/201212/175541.html MYSQL入門學習之六:MYSQL的運算符 http://www.BkJia.com/database/201212/175862.html MYSQL入門學習之七:MYSQL常用函數 http://www.BkJia.com/database/201212/175864.html MYSQL入門學習之八:數據庫及表的基本操作 http://www.BkJia.com/database/201212/175867.html   一、創建索引  www.2cto.com           MYSQL常用的索引類型主要有以下幾種: 1、普通索引         CREATE INDEX idx_name ON table_name(table_col(length));         如果索引字段是CHAR,varchar類型,length可以指定小於字段實際長度;如果是BLOB和TEXT類型,必須指定length。         mysql> create index idx_name on user(name(10));         mysql> show index from user;         +-------+------------+----------+--------------+-------------+-----------+         | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation |         +-------+------------+----------+--------------+-------------+-----------+         | user  |          1 | idx_name |            1 | name        | A         |         +-------+------------+----------+--------------+-------------+-----------+ 2、唯一索引         CREATE UNIQUE INDEX idx_name ON table_name(table_col(length));         它與普通索引類似,但不同的是,其索引列的值必須唯一,但允許有空值。         mysql> create unique index idx_cn_name_u on user(cn_name(20));         mysql> show index from user;         +-------+------------+---------------+--------------+-------------+-----------+         | Table | Non_unique | Key_name      | Seq_in_index | Column_name | Collation |         +-------+------------+---------------+--------------+-------------+-----------+         | user  |          0 | idx_cn_name_u |            1 | cn_name     | A         |         | user  |          1 | idx_name      |            1 | name        | A         |         +-------+------------+---------------+--------------+-------------+-----------+ 3、主鍵索引         ALTER TABLE table_name ADD PRIMARY KEY (table_col);         它是一種特殊的唯一索引,且不允許有空值。一個表只能有一個主鍵索引。         mysql> alter table user add primary key (id);         mysql> show index from user;         +-------+------------+---------------+--------------+-------------+         | Table | Non_unique | Key_name      | Seq_in_index | Column_name |         +-------+------------+---------------+--------------+-------------+         | user  |          0 | PRIMARY       |            1 | id          |         | user  |          0 | idx_cn_name_u |            1 | cn_name     |         | user  |          1 | idx_name      |            1 | name        |         +-------+------------+---------------+--------------+-------------+ 4、組合索引         CREATE INDEX idx_name ON table_name(table_col_1,table_col_2,...,table_col_n);         它允許使用多個列作為索引列。         mysql> create index idx_name_sex on user(name,sex);         mysql> show index from user;         +-------+------------+---------------+--------------+-------------+-----------+-         | Table | Non_unique | Key_name      | Seq_in_index | Column_name | Collation |         +-------+------------+---------------+--------------+-------------+-----------+-         | user  |          0 | PRIMARY       |            1 | id          | A         |         | user  |          0 | idx_cn_name_u |            1 | cn_name     | A         |         | user  |          1 | idx_name      |            1 | name        | A         |         | user  |          1 | idx_name_sex  |            1 | name        | A         |         | user  |          1 | idx_name_sex  |            2 | sex         | A         |         +-------+------------+---------------+--------------+-------------+-----------+-  www.2cto.com   二、刪除索引         DROP INDEX idx_name on table_name;         ALTER TABLE table_name DROP INDEX idx_name;         ALTER TABLE table_name DROP PRIMARY KEY;         mysql> alter table user drop primary key;         mysql> show keys from user;         +-------+------------+---------------+--------------+-------------+-         | Table | Non_unique | Key_name      | Seq_in_index | Column_name |         +-------+------------+---------------+--------------+-------------+-         | user  |          0 | idx_cn_name_u |            1 | cn_name     |         | user  |          1 | idx_name      |            1 | name        |         | user  |          1 | idx_name_sex  |            1 | name        |         | user  |          1 | idx_name_sex  |            2 | sex         |         +-------+------------+---------------+--------------+-------------+- 三、查看索引         SHOW INDEX FROM table_name;         SHOW KEYS FROM table_name;         查看索引語句的一個完全輸出類似如下:         mysql> show keys from user;         +-------+------------+---------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+         | Table | Non_unique | Key_name      | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |         +-------+------------+---------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+         | user  |          0 | idx_cn_name_u |            1 | cn_name     | A         |        NULL |       20 | NULL   | YES  | BTREE      |         |         | user  |          1 | idx_name      |            1 | name        | A         |        NULL |       10 | NULL   | YES  | BTREE      |         |         | user  |          1 | idx_name_sex  |            1 | name        | A         |        NULL |     NULL | NULL   | YES  | BTREE      |         |         | user  |          1 | idx_name_sex  |            2 | sex         | A         |        NULL |     NULL | NULL   | YES  | BTREE      |         |         +-------+------------+---------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+         其中:         Table:表的名稱         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)。         Comment:索引說明。
  四、使用索引的注意事項 1、索引不會包含有NULL值的列         只要列中包含有NULL值都將不會被包含在索引中,復合索引中只要有一列含有NULL值,那麼這一列對於此復合索引就是無效的。所以在數據庫設計時盡量不要讓字段的默認值為NULL。 2、使用短索引         對列進行索引,如果可能應該指定一個前綴長度。例如,如果有一個CHAR(255)的列,如果在前10個或20個字符內,多數值是惟一的,那麼就不要對整個列進行索引。短索引不僅可以提高查詢速度而且可以節省磁盤空間和I/O操作。 3、不要在列上進行運算         在列上進行運算,將導致索引失效而進行全表掃描。 4、不使用NOT和<>操作 5、索引列排序         MySQL查詢只使用一個索引,因此如果where子句中已經使用了索引的話,那麼order by中的列是不會使用索引的。因此數據庫默認排序可以符合要求的情況下不要使用排序操作;盡量不要包含多個列的排序,如果需要最好給這些列創建復合索引。  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved