MySQL使用(索引)

索引用於快速找出在某個列中有一特定值的行,不使用索引,MySQL必須從第一條記錄開始讀完整個表,直到找出相關的行,表越大,查詢數據所花費的時間就越多,如果表中查詢的列有一個索引,MySQL能夠快速到達一個位置去搜索數據文件,而不必查看所有數據,那麼將會節省很大一部分時間。

索引實際上也是一張表,該表保存了主鍵與索引字段,並指向實體表的記錄。
MySQL中的索引的存儲類型有兩種:
1、BTREE,也就是用樹來存儲該字段;
2、HASH,也就是用Hash值來存儲該字段;

索引有四類:
1、單列索引(普通索引,唯一索引,主鍵索引),即一個索引只包含單個列,一個表可以有多個單列索引。
(1)普通索引:基本索引類型,沒有什麼限制,允許在定義索引的列中插入重複值和空值,純粹爲了查詢數據更快一點。
(2)唯一索引:索引列中的值必須是唯一的,但是允許爲空值。
(3)主鍵索引:一種特殊的唯一索引,不允許有空值。
2、組合索引,在表中的多個字段組合上創建的索引,只有在查詢條件中使用了這些字段的左邊字段時,索引纔會被使用,使用組合索引時遵循最左前綴集合。即一個索引包含多個列。
3、全文索引:在一堆文字中,通過其中的某個關鍵字等,就能找到該字段所屬的記錄行。只有在MyISAM引擎上才能使用,只能在CHAR,VARCHAR,TEXT類型字段上使用全文索引。
4、空間索引:對空間數據類型的字段建立的索引,MySQL中的空間數據類型有四種,GEOMETRY、POINT、LINESTRING、POLYGON。創建空間索引時,使用SPATIAL關鍵字;且要求引擎爲MyISAM,創建空間索引的列,必須將其聲明爲NOT NULL。

索引的優點
對於MySQL的高效運行是很重要的,索引可以大大提高MySQL的檢索速度。

索引的缺點
1、索引大大提高了查詢速度,同時卻會降低更新表的速度,如對錶進行INSERT、UPDATE和DELETE。因爲更新表時,MySQL不僅要保存數據,還要保存一下索引文件。
2、建立索引會佔用磁盤空間的索引文件。

查看索引:

show index from 表名;

示例:

show index from personTable;

創建索引
1、無索引表添加普通索引create:create index 索引名稱 on 表名 (表中創建索引的字段名);
示例:

create index indexPerson on personTable (name);

2、無索引表添加普通索引alter…add table 表名 add index 索引名稱 (表中創建索引的字段名);
示例:

alter table personTable add index indexName (name);

3、新建表時創建唯一索引unique:create table 表名 (字段名, …,unique 索引名稱 (表中創建索引的字段名));
示例:

create table bookTable (id int not null,name varchar(20),price double,unique indexName (name));

或唯一索引alter…add unique:alter table 表名 add unique 索引名稱 (表中創建索引的字段名);
示例:

alter table personTable add unique indexName (name);

5、主鍵索引primary key:alter table 表名 add primary key 索引名稱 (表中創建索引的字段名);
示例:

alter table personTable add primary key indexID (id);

6、全文索引fulltext:alter table 表名 add fulltext 索引名稱 (表中創建索引的字段名);
示例:

alter table personTable add fulltext indexName (name);

7、組合索引:alter table 表名 add index 索引名稱 (表中創建索引的字段名1,表中創建索引的字段名2,…);
示例:

alter table personTable add index indexName (personID,name);

刪除索引
1、alter table 表名 drop index 索引名稱;
示例:

alter table personTable drop index indexPerson;

2、drop index 索引名稱 on 表名;
示例:

drop index indexName on personTable;

使用索引

注意:
1、創建索引時,你需要確保該索引是應用在 SQL 查詢語句的條件(一般作爲 WHERE 子句的條件)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章