索引體積 MySQL入門之索引

2021-10-16 07:47:35 字數 1550 閱讀 1731

索引

1 什麼是索引

索引是一種快速查詢表中內容的機制,使用索引可以提高查詢效率,相當於字典的目錄

可以將查詢過程中經常使用的條件設為索引

2 mysql中索引的型別

1)普通索引

這是最基本的索引型別,而且它沒有唯一性之類的限制。普通索引可以通過以下幾種方式建立:

建立索引,例如create index 《索引的名字》 on tablename (列的列表);

修改表,例如alter table tablename add index [索引的名字] (列的列表);

建立表的時候指定索引,例如create table tablename ( [...], index [索引的名字] (列的列表) );

2)唯一性索引

這種索引和前面的「普通索引」基本相同,但有乙個區別:索引列的所有值都只能出現一次,即必須唯一。唯一性索引可以用以下幾種方式建立:

建立索引,例如create unique index 《索引的名字》 on tablename (列的列表);

修改表,例如alter table tablename add unique [索引的名字] (列的列表);

建立表的時候指定索引,例如create table tablename ( [...], unique [索引的名字] (列的列表) );

3)主鍵

主鍵是一種唯一性索引,但它必須指定為「primary key」。主鍵一般在建立表的時候指定,例如「create table tablename ( [...], primary key (列的列表) ); 」。但是,我們也可以通過修改表的方式加入主鍵,例如「alter table tablename add primary key (列的列表); 」

4)全文索引

mysql從3.23.23版開始支援全文索引和全文檢索。在mysql中,全文索引的索引型別為fulltext。全文索引可以在varchar或者text型別的列上建立。它可以通過create table命令建立,也可以通過alter table或create index命令建立。對於大規模的資料集,通過alter table(或者create index)命令建立全文索引要比把記錄插入帶有全文索引的空表更快。

3 什麼情況下建立索引

1)表經常進行 select 操作

2)表很大(記錄超多),記錄內容分布範圍很廣

3)列名經常在 where 子句或連線條件**現

注意:符合上述某一條要求,都可建立索引,建立索引是乙個優化問題,同樣也是乙個策略問題

4索引的缺點

第二,對於需要寫入資料的操作,比如delete、update以及insert操作,索引會降低它們的速度。這是因為mysql不僅要把改動資料寫入資料檔案,而且它還要把這些改動寫入索引檔案。

-- 100萬條資料,查詢時有無索引,時間差距明顯--

select * from user where username='zz345';

mysql索引之聚集索引

聚集索引不是一種單獨的索引型別,而是一種儲存資料方式。其具體細節依賴於實現方式,但是innodb的聚集索引實際上在同樣的結構中儲存了b tree索引和資料行。當表有聚集索引的時候,它的資料行實際儲存在索引的葉子頁中。術語 聚集 指實際的資料行和相關的鍵值都儲存在一起。每個表只能有乙個聚集索引,因為不...

mysql索引 之覆蓋索引

今天參考了 高效能mysql 與幾篇博文,總結一下我個人的對覆蓋索引的理解。首先,覆蓋索引並不是一種新的資料結構,它的意思是在查詢的時候,利用到的索引已經完全包含需要查詢欄位的情況,在這種情況下,查詢結果直接就是索引的值,並不需要再利用索引回表查詢了。繼續拿sakila資料庫 mysql安裝好後自帶...

mysql索引之雜湊索引

雜湊演算法時間複雜度為o 1 且不只存在於索引中,每個資料庫應用中都存在該資料結構。雜湊表也為雜湊表,又直接定址改進而來。在雜湊的方式下,乙個元素k處於h k 中,即利用雜湊函式h,根據關鍵字k計算出槽的位置。函式h將關鍵字域對映到雜湊表t 0.m 1 的槽位上。上圖中雜湊函式h有可能將兩個不同的關...