索引
數據庫對象索引:一種組合數據的方式,通過索引對象,可以快速查詢到數據庫對象表中的特定記錄,是一種提高性能的最常用方式。
一個索引會包含表中的按照一定順序排序的一列或多列字段。
索引操作:
創建索引,修改索引,刪除索引。
數據庫對象索引主要為了提高從表中檢索數據的速度。由於數據存儲在數據庫表中,所以索引是創建在數據庫對象上的,由表中的一個字段或多個字段生成的鍵組成,這些鍵存儲在數據結構裡(B-樹或哈希表)中,通過MySql可以快速有效的查找與鍵值相關聯的字段。根據索引的存儲類型,可以將所以分為B型樹索引和哈希索引
注意:InnoDB和MyISAM存儲引擎支持Btree類型索引,MEMORY存儲引擎支持Hash類型索引,默認為前者索引。
數據庫對象索引的出現,除了提供數據庫管理系統的查找速度,而且還可以保證字段的唯一性。從而實現數據庫表的唯一性。
六種索引:普通索引,唯一索引,全文索引,單列索引,多列索引,空間索引
利弊:
利:提高查找速度
弊:過多索引占用磁盤空間
適合創建索引的情況:
1、經常被查詢的字段,即在where中出現的字段
2、分組的字段,即在group by中出現的字段
3、存在依賴關系的字表和父表之間的聯合查詢,即主鍵或外鍵字段
4、設置唯一完整性的字段
不適合創建的情況:
1、在查詢中很少被使用的字段
2、擁有許多重復值的字段 普通索引
創建:
三種方式:
1、創建表時創建索引
2、在已經存在的表上創建索引
3、通過SQL語句在ALTER TABLE來創建
1、create table tablename( column1 type, column2 type, .... INDEX|KEY [indexname] (columname [(長度)] [ASC|DESC]) )
通過index或key來指定字段為索引。
在創建索引時,可以指定索引的長度。這是因為不同存儲引擎定義了標的最大索引數和最大索引長度
mysql所支持的存儲引擎對每一個表至少支持16個索引,總索引長度至少為256字節create table t_index1( id int, name varchar(20), loc varchar(20), index index_id(id) )
之後向表裡插入多條記錄(這是必須的,如果只有一條記錄,出現不了下面的字樣),然後執行
explain select * from t_index1 where id=1\G
之後出現
possible key:index_id
key:index_id
的字樣之後就說明id的索引對象被啟用
2、在已經存在的表上創建普通索引
create index indexname on tablename(column[(長度)][asc|desc])
create index index_name on t_index1(name)
驗證:
explain select * from t_index1 where id=1\G
字樣出現
possible key:index_name
key:index_name
3、通過SQL語句alter table 創建普通索引
alter table tablename add index|key indexname(columnname[(length)][asc|desc])又見識到create和alter的兩個功能。修改索引會不會用alter呢?刪除索引會不會用drop呢?往後看看
唯一索引
1、創建表時創建唯一索引
create table tablename( column1 type, column2 type, ... unique index|key indexname(column[(length)][asc|desc]) )
所謂的唯一索引就是在普通索引上添加上關鍵字UNIQUE。
2、在已經存在的表上創建一個唯一索引
試著自己寫寫
create unique index indexname on tablename(columname[(長度)][asc|desc])
完全OK3、通過SQL語句alter table創建索引
alter table tablename add unique index|key indexname(columnname[(length)][asc|desc])
全文索引
全文索引主要關聯在數據類型為char,varchar,text字段,以便能夠更加快速查詢數據量較大的字符串類型的字段
mysql從3.23.23版本開始支持全文索引,只能在存儲類型為myISAM的數據庫表上創建全文索引。
默認情況下,全文索引的搜索方式為不區分大小寫,如果全文索引所關聯的字段為二進制數據類型,則以區分大小寫的搜索方式執行。
關鍵字:fulltext index
三種創建方式跟上面的類似,將index關鍵字寫成fulltext index就是創建了全文索引
多列索引
在創建索引時,所關聯的字段不是一個字段,而是多個字段
雖然可以通過所關聯的字段進行查詢,但是只有查詢條件使用了所關聯字段中的第一個字段,多列索引才會被使用。
create table t_name( column1 type, column2 type, ... index|key index_columni_columnj(columni[(length)][asc|desc],columnj[(length)][asc|desc])
)其他兩種創建方式類推一下就可以了。
六種索引:普通索引,唯一索引,全文索引,單列索引,多列索引,空間索引
一共是六種,這裡講到了三種。
網上搜索到的空間索引
空間索引是對空間數據類型的字段建立的索引,MYSQL中的空間數據類型有4種,分別是GEOMETRY、POINT、LINESTRING、POLYGON。MYSQL使用SPATIAL關鍵字進行擴展,使得能夠用於創建正規索引類型的語法創建空間索引。創建空間索引的列,必須
將其聲明為NOT NULL,空間索引只能在存儲引擎為MYISAM的表中創建
create table index6( id int, space geometry not null, spatial index index6_sp(space) );
以上都是創建索引,有創建就得有刪除
刪除索引
drop index indexname on tablename語法很簡單。