《Mysql的索引》要點:
本文介紹了Mysql的索引,希望對您有用。如果有疑問,可以聯系我們。
索引是贊助MySql高效獲取數據的數據結構.
索引是一種特殊的文件(InnoDB數據表上的索引是表空間的一個組成部分),它們包括著對數據表里所有記錄的引用指針.更通俗的說,數據庫索引好比是一本書前面的目錄,能加快數據庫的查詢速度.
索引分為聚簇索引和非聚簇索引兩種,聚簇索引是依照數據存放的物理位置為順序的,而非聚簇索引就不一樣了;聚簇索引能提高多行檢索的速度,而非聚簇索引對于單行的檢索很快.
MySQL索引的類型
1. 普通索引
這是最基本的索引,它沒有任何限制,MyIASM中默認的BTREE類型的索引,也是我們年夜多數情況下用到的索引.
–––直接創立索引
CREATE INDEX index_name ON table(column(length))
–修改表布局的方式添加索引
ALTER TABLE table_name ADD INDEX index_name ON (column(length))
–––創立表的時候同時創立索引
CREATE TABLE `table` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`title` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL ,
`time` int(10) NULL DEFAULT NULL ,
PRIMARY KEY (`id`),
INDEX index_name (title(length))
)
–––刪除索引
DROP INDEX index_name ON table
2. 唯一索引
與普通索引類似,不同的就是:索引列的值必須唯一,但允許有空值(注意和主鍵不同).如果是組合索引,則列值的組合必須唯一,創建辦法和普通索引類似.
–––創立唯一索引
CREATE UNIQUE INDEX indexName ON table(column(length))
–––修改表布局
ALTER TABLE table_name ADD UNIQUE indexName ON (column(length))
–––創立表的時候直接指定
CREATE TABLE `table` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`title` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL ,
`time` int(10) NULL DEFAULT NULL ,
PRIMARY KEY (`id`),
UNIQUE indexName (title(length))
);
3. 全文索引(FULLTEXT)
MySQL從3.23.23版開始支持全文索引和全文檢索,FULLTEXT索引僅可用于 MyISAM 表;他們可以從CHAR、VARCHAR或TEXT列中作為CREATE TABLE語句的一部分被創建,或是隨后使用ALTER TABLE 或CREATE INDEX被添加.////對于較大的數據集,將你的資料輸入一個沒有FULLTEXT索引的表中,然后創建索引,其速度比把資料輸入現有FULLTEXT索引的速度更為快.不外切記對于大容量的數據表,生成全文索引是一個非常消耗時間非常消耗硬盤空間的做法.
–––創立表的適合添加全文索引
CREATE TABLE `table` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`title` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL ,
`time` int(10) NULL DEFAULT NULL ,
PRIMARY KEY (`id`),
FULLTEXT (content)
);
–––修改表布局添加全文索引
ALTER TABLE article ADD FULLTEXT index_content(content)
–直接創立索引
CREATE FULLTEXT INDEX index_content ON article(content)
4. 單列索引、多列索引
多個單列索引與單個多列索引的查詢效果分歧,因為執行查詢時,MySQL只能使用一個索引,會從多個索引中選擇一個限制最為嚴格的索引.
5. 組合索引(最左前綴)
平時用的SQL查詢語句一般都有比擬多的限制條件,所以為了進一步榨取MySQL的效率,就要考慮建立組合索引.例如針對title和time建立一個組合索引:ALTER TABLE article ADD INDEX index_titme_time (title(50),time(10)).建立這樣的組合索引,其實是相當于分別建立了下面兩組組合索引:
–title,time
–title
為什么沒有time這樣的組合索引呢?這是因為MySQL組合索引“最左前綴”的結果.簡單的理解就是只從最左面的開始組合.并不是只要包括這兩列的查詢都會用到該組合索引.
索引文件自己要消耗存儲空間,同時索引會加重插入、刪除和修改記錄時的負擔,另外,MySQL在運行時也要消耗資源維護索引,因此索引并不是越多越好.
關于索引還有許多,這里只是簡介.
歡迎參與《Mysql的索引》討論,分享您的想法,維易PHP學院為您提供專業教程。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/7141.html