1.索引的概念:
它是乙個單獨的,儲存在磁碟上的資料結構,它們包含著對資料庫表裡所有記錄的引用指標,主要用於快速找出一列或者多列中有特定值的行,所有mysql列型別都可以被索引。
2.索引的儲存型別:
索引是在儲存引擎中實現的,mysql中索引的儲存型別有倆種:btree和hash,具體和表的儲存引擎相關,myisam和innodb儲存引擎只支援btree索引,memory/heap儲存引擎可以儲存btree和hash倆種索引。
3.索引的分類:
(1) 普通索引和唯一索引:普通索引可以在索引的列中插入重複的值和空值,唯一索允許有空值,主鍵索引不能為空。
(2) 單列索引和組合索引:乙個表可以多個單列索引,組合索引指在表的多個字段組合上建立的索引,只有在查詢時使用了這些欄位的左邊欄位時,索引才能被使用
(3) 全文索引:在定義索引的列上支援值的全文查詢,允許索引的列有重複值和空值,只能在列型別為char,varchar,text型別的列上建立,只有myisam儲存引擎支援全文索引。
(4) 空間索引
4.索引的設計原則:
(1) 索引並不是越多越好,不僅占用磁碟空間,對增加,修改,刪除效能也有影響,表的修改會導致索引的動態變化。
(2) 避免對經常更新的表使用過多的索引,經常查詢的字段應該建立索引,但要避免新增不必要的字段。
(3) 資料量小的表最好不要使用索引,反而會降低查詢速度。
(4) 在條件表示式中經常用到的不同值較多的列上建立索引,少的不要建立比如性別列男女倆項沒有必要建立索引。
(5) 在頻繁進行分組和排序的列上建立索引,如果待排序的字段有很多,可以在這些列上建立組合索引。
5.索引的建立:
(1)建立表的時候建立:
create table `tr_log_type` (
`id` varchar(32) not null comment '主鍵',
`log_id` varchar(32) default null comment '日誌id',
`vehicle_id` varchar(32) default null comment '車輛id',
primary key (`id`),
index(log_id) 普通索引,
unique index uni(log_id) 唯一索引,
index mindex(log_id,vehicle_id) 復合索引,
fulltext index findex(log_id) 全文索引
) (2) 表已經存在新新增索引:
第一種:alter table tr_log_type add index logidindex(log_id);
第二種:create index logidindex on tr_log_type(log_id);
6.索引的刪除:第一種:alter table tr_log_type drop index logidindex;
第二種:drop index logidindex on tr_log_type;
7.檢視索引:
show index from tr_log_type;
8.索引的優點:
(1) 通過建立唯一索引,可以保證資料庫表中每一行資料的唯一性。
(2) 可以大大提高資料的查詢速度
(3) 在實現資料的參考完整性方面,可以加速表與表之間的連線
(4) 在使用分組和排序子句進行查詢時,也可以顯著減少查詢中的分組和排序的時間
9.索引的缺點:
(1) 建立索引和維護索引要花費大量的時間,資料量越大花費的時間越多。
(2) 索引會占用磁碟空間。
(3) 當對表資料進行增加,修改,刪除,索引也要動態的維護,降低了資料的維護速度。
10.索引的建立位置:
索引一般建立在where和join字句以及order by 的字段上面
11.注意事項:
(1)使用全文索引注意事項:mysql預設的儲存引擎是innodb,如果想使用全文索引必須將儲存引擎修改為myisam
(2)使用組合索引注意事項:它遵從最左字首原則,利用索引中最左邊的列集匹配行,如果我們的組合索引為有id,name,age組成,
mysql能使用索引的組合為id,name,age
或則id,name或則id
(3)索引失效:like以%開頭
mysql 索引總結 mysql索引總結
mysql中每乙個表都有乙個聚簇索引clusted index,該所索引是預設建立的,除此之外的表上的每乙個非聚簇索引都是二級索引,又叫輔助索引 secondary indexes 以innodb來說,每個innodb表具有乙個特殊的索引稱為聚集索引,如果您的表上定義有主鍵,該主鍵索引是聚集索引,如...
mysql次級索引 MySQL 索引總結
1 索引是做什麼的?想象一下,你面前有本詞典,資料就是書的正文內容,你就是那個cpu,而索引,則是書的目錄 索引用於快速找出在某個列中有一特定值的行。不使用索引,mysql必須從第1條記錄開始然後讀完整個表直到找出相關的行。表越大,花費的時間越多。如果表中查詢的列有乙個索引,mysql能快速到達乙個...
mysql 索引總結
索引用來快速地尋找那些具有特定值的記錄,所有mysql索引都以b 樹的形式儲存。如果沒有索引,執行查詢時mysql必須從第乙個記錄開始掃瞄整個表的所有記錄,直至找到符合要求的記錄。表裡面的記錄數量越多,這個操作的代價就越高。如果作為搜尋條件的列上已經建立了索引,mysql無需掃瞄任何記錄即可迅速得到...