MYSQL索引
一、索引的優缺點
優點: 1.通過創建唯一索引,可以保證資料庫表中每一行的唯一性, 2.可以大大加快查詢速度,這是創建索引的最主要原因 3.在實作資料參考完整性方面,可以加速表和表之間的鏈接 4.在使用分組和排序子句進行資料查詢時,也可以顯著減少查詢中分組和查詢的時間缺點:
1.創建索引和維護索引要耗費時間,并且隨著資料量的增加所耗費的時間也會增加, 2.索引需要占磁盤空間,除了資料表占資料空間之外,每一個索引還要占一定的物理空間,如果有大量的索引,索引檔案可能比資料檔案更快達到最大檔案尺寸, 3.當對表中的資料進行增加、洗掉和修改的時候,索引也要動態地維護,這樣就降低了資料的維護速度,二、索引的分類
1.普通索引和唯一索引
普通索引是MYSQL中的基本索引型別,允許在定義索引的列中插入重復值和空值, 唯一索引,索引列的值必須唯一,但允許有空值,如果是組合索引,則列值的組合必須唯一,主鍵索引是一種特殊的唯一索引,不允許有空值2.單列索引和組合索引
單列索引即一個索引只包含一個列,一個表可以有多個單列索引 組合索引指在表的多個欄位組合上創建的索引,只有在查詢條件中使用了這些欄位的左邊欄位時,索引才會被使用,組合索引遵循最左原則3.全文索引
全文索引型別為fulltext,在定義索引的列上支持值得全文查找,允許在這些索引列中插入重復值和空值,全文索引可以在char、varchar和text型別的列上創建,MYSQL中只有MyISAM支持全文索引4.空間索引
空間索引是對空間資料型別的欄位建立的索引,mysql中的空間資料型別有4種,分別是:GEOMETRY、POINT、LINESTRING和POLYGON.mysql中使用spatial關鍵字進行擴展,使得能夠用于創建正規索引類似的語法創建空間索引,創建空間索引的列,必須將其宣告為NOT NULL,空間索引只能在MyISAM中創建三、索引的設計原則
1.索引并非越多越好,一個表中如有大量的索引,不僅占用磁盤空間,而且會影響INSERT、DELETE、UPDATE等陳述句的性能,因為當表中的資料更改的同時,索引也會進行調整和新, 2.避免對經常更新的表進行過多的索引,并且索引中的列盡可能少,而對經常用于查詢的欄位應該創建索引,但要避免添加不必要的欄位, 3.資料量小的表最好不要使用索引,由于資料較少,查詢花費的時間可能比遍歷索引的時間還要短,索引可能不會產生優化效果, 4.在條件運算式中經常用到的不同值較多的列上建立索引,在不同值很少的列上不要建立索引,比如在學生表的“性別”欄位上只有“男”與“女”兩個不同值,因此就無須建立索引,如果建立索引不但不會提高查詢效率,反而會嚴重降低資料更新速度, 5.當唯-性是某種資料本身的特征時,指定唯一索引,使用唯一索引需能確保定義的列的資料完整性,以提高查詢速度, 6.在頻繁進行排序或分組( 即進行group by或order by操作)的列上建立索引,如果待排序的列有多個,可以在這些列上建立組合索引,四、創建索引,創建索引分為三種方法
1.創建表時指定索引
create table book ( id int primary key auto_increment, #主鍵自增 name varchar(255) not null unique, #唯一索引 author varchar(255) not null, info varchar(255), comment varchar(255), year int(11) , index (year) #普通索引 ); 可以定義欄位的時候定義索引,也可以在最后給指定列定義索引 eg: 唯一索引:unique index index_name(col) 組合索引 : index index_name(col,col1,col2) 全文索引:fulltext index fullTxtIdx(col)------只有MyISAM支持 空間索引:spatial index spaIdx(col)————只有MyISAM支持 組合索引遵循最左原則:利用索引中最左邊的列集來匹配行,這樣的列集成為最左前綴2.修改表時添加索引
語法: ALTER TABLE table_name add [ unique | fulltext | spatial] [index | key ] [index_name] (col(length),... )[ ASC | DESC] 3.為存在的表添加索引 create [unique | fulltext | spatial] index index_name on table_name (col(length))[ASC | DESC] eg: ALTER TABLE `dev_djbisai`.`dj_game_contest_user` ADD UNIQUE INDEX `a`(`status`, `create_time`) USING BTREE COMMENT 'aaaa'; 五、洗掉索引 1.使用ALTER TABLE 洗掉索引 ALTER TABLE table_name DROP INDEX index_name;轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/94428.html
標籤:MySQL
上一篇:MySQL基礎-視圖
下一篇:MySQL基礎-存盤程序
