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

mysql學習筆記之三(索引)

編輯:MySQL綜合教程

mysql學習筆記之三(索引)


索引

數據庫對象索引:一種組合數據的方式,通過索引對象,可以快速查詢到數據庫對象表中的特定記錄,是一種提高性能的最常用方式。

一個索引會包含表中的按照一定順序排序的一列或多列字段。

索引操作:

創建索引,修改索引,刪除索引。

數據庫對象索引主要為了提高從表中檢索數據的速度。由於數據存儲在數據庫表中,所以索引是創建在數據庫對象上的,由表中的一個字段或多個字段生成的鍵組成,這些鍵存儲在數據結構裡(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語法很簡單。

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