數據庫索引
作用:
提高查詢速度
確保數據的唯一性
可以加速表和表之間的連接,實現表和表之間的參照完整性
使用分組和排序子句進行數據檢索時,可以減少分組和排序的時間
全文檢索字段進行搜索優化
分類:
主鍵索引(PRIMAY KEY)
唯一索引(UNIQUE)
常規索引(INDEX)
全文索引(FULLTEXT)
主鍵索引
主鍵:
某一個屬性組能唯一標識的一條記錄
如:學生表(學號,姓名,班級,性別等等),學號是唯一標識的,可以作為主鍵
特點:
最常見的索引類型
確保數據記錄的唯一性
確定特定數據記錄在數據庫中的位置
實例:
CREATE TABLE `表名`(、
`GradeID` INT(11) AUTO_INCREMENT PRIMARY KEY,
#或 PRIMARY KEY(`GradeID`)
)
唯一索引
作用:
避免同一個表中某數據列中的值重復
與主鍵索引的區別
主鍵索引只能有一個
唯一索引可有多個
實例:
CREATE TABLE `Grade`(、
`GradeID` INT(11) AUTO_INCREMENT PRIMARY KEY,
`GradeName` VARCHAR(32) NOT NULL UNIQUE
#或 UNIQUE KEY ` GradeID`(`GradeID`)
常規索引
作用:
快速定位特定數據
注意:
index 和 key 關鍵字都可以設置常規索引
應加在查詢條件的字段
不易添加太多常規索引,影響數據的插入,刪除和修改操作
實例:
##創建表時添加
CREATE TABLE `result`{
//省略一些代碼
INDEX / KEY `ind` (`studentNo`,`subjectNo`)
}
##創建后追加
ALTER TABLE `result` ADD INDEX `ind` (`studentNo`,`subjectNo`);
全文索引
作用:
快速定位特定數據
注意:
只能用於MyISAM類型的數據表
只能用於CHAR ,VARCHAR,TEXT數據列類型
使用大型數據集
實例:
CREATE TABLE `student`(
#省略一些sql語句
FULLTEXT(`StudentName`)
)ENDINE=MYISAM;
ALTER TABLE employee ADD FULLTEXT(`first_name`)
唯一索引補充:
它與前面的普通索引類似,不同的就是:索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一。它有以下幾種創建方式:
創建索引
CREATE UNIQUE INDEX indexName ON mytable(username(length))
修改表結構
ALTER table mytable ADD UNIQUE [indexName] (username(length))
創建表的時候直接指定
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, UNIQUE [indexName] (username(length)) );
基本索引:
這是最基本的索引,它沒有任何限制。它有以下幾種創建方式:
CREATE INDEX indexName ON mytable(username(length));
如果是CHAR,VARCHAR類型,length可以小於字段實際長度;如果是BLOB和TEXT類型,必須指定 length。
修改表結構(添加索引)
ALTER table tableName ADD INDEX indexName(columnName)
創建表的時候直接指定
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, INDEX [indexName] (username(length)) );
刪除索引的語法
DROP INDEX [indexName] ON mytable;