mysql 索引( mysql index )
以下是查閱《mysql_administrators_bible》的摘錄和總結
索引 mysql index
索引是一種資料結構,可以是B-tree, R-tree, 或者 hash 結構。其中R-tree
常用於查詢比較接近的資料;B-trees適合用於查詢某範圍內的資料,可以很快的從當前資料找到下條資料;hash結構則適用於隨機訪問的場合,查詢每條資料的時間幾乎相同。顯然,若要查詢某個時間段的資料,用B-tree結構要比hash結構快好多。
優化查詢的有效方法是為經常查詢的欄位建立索引,如無索引查詢資料時,會遍歷整張表(多麼恐怖啊);若有了索引查詢會容易很多。當進行 UPDATE, DELETE, 以及 INSERT 操作時,mysql會自動更新索引資訊。
1.建立和刪除索引( Creating and dropping indexes )
建立:
- mysql> USE sakila;
- Database changed
- mysql> CREATE INDEX idx_actor_first_name ON actor (first_name);
- 或者
- mysql> ALTER TABLE actor ADD INDEX idx_actor_first_name (first_name);
PS:當用 create index 建立索引時,必須指定索引的名字,否則mysql會報錯;
用 ALTER TABLE 建立索引時,可以不指定索引名字,若不指定mysql會自動生成索引名字
建立索引時,若不想用儲存引擎的預設索引型別,可以指定索引的型別:
- mysql> ALTER TABLE temp_index
- ADD INDEX (first_name),
- ADD INDEX lname (last_name) USING BTREE
刪除:
- DROP INDEX indexname ON tblname
- mysql> DROP INDEX idx_actor_fname ON actor;
- mysql> ALTER TABLE actor DROP INDEX idx_actor_fname;
2.索引型別
BTREE 適合連續讀取資料
RTREE 適合根據一條資料找附近的資料
HASH 適合隨機讀取資料
FULLTEXT
SPATIAL
檢視某個表中存在的索引型別
- mysql> SELECT INDEX_NAME,INDEX_TYPE
- -> FROM INFORMATION_SCHEMA.STATISTICS
- -> WHERE TABLE_NAME=’temp_index’;
- +------------+------------+
- | INDEX_NAME | INDEX_TYPE |
- +------------+------------+
- | first_name | HASH |
- | lname | BTREE |
- +------------+------------+
3.索引冗餘
如果兩個或者多個索引包含了相同的索引資訊,那麼就存在索引冗餘。
不同型別的索引有不同的索引冗餘判斷:
(1) SPATIAL 索引
SPATIAL 只能是一個簡單索引,不能說複合索引;存在冗餘的情況是同一個欄位有兩個索引。
(2) FULLTEXT 索引
若一個FULLTEXT索引是另一個索引的子集(不考慮欄位順序),則存在冗餘。
例如: 表中包含如下兩個索引
■ (field1)
■ (field1, field2)
(3) HASH 索引
若一個索引在不考慮欄位順序的情況下,索引欄位相同,則存在冗餘。
例如:表中包含如下兩個索引
■ (field1, field2, field3)
■ (field1, field3, field2)
(4) BTREE 索引
若一個索引是另一個索引的子集(考慮欄位順序),則存在冗餘。
例如:表中包含如下兩個索引
■ (field2)
■ (field2, field1)
PS:若兩個或多個索引有相同的索引欄位和欄位順序,但是有不同的索引型別,這樣的索引是不冗餘的。因為每種索引型別有自己的索引值。
相關文章
- Mysql——index(索引)使用MySqlIndex索引
- MySQL 8.0新特性-倒敘索引 desc indexMySql索引Index
- mysql下建立索引讓其index全掃描MySql索引Index
- MySQL SQL優化 - 覆蓋索引(covering index)MySql優化索引Index
- <MYSQL Index>MySqlIndex
- MySQL SQL最佳化 - 覆蓋索引(covering index)MySql索引Index
- MySQL 優化之 index_merge (索引合併)MySql優化Index索引
- MySQL — 索引MySql索引
- mysql索引MySql索引
- [Mysql]索引MySql索引
- MySQL 索引MySql索引
- 隨筆:MySQL:eq_range_index_dive_limit 索引下探介面MySqlIndexMIT索引
- MySQL中為什麼要使用索引合併(Index Merge)?MySql索引Index
- MySQL index hints 使用MySqlIndex
- 【MySQL(2)| MySQL索引機制】MySql索引
- MySql(一) 淺析MySql索引MySql索引
- mysql索引之字首索引MySql索引
- ElasticSearch 索引 VS MySQL 索引Elasticsearch索引MySql
- MySQL 索引 +explainMySql索引AI
- MySQL索引原理MySql索引
- MySQL InnoDB 索引MySql索引
- MySQL 索引初探MySql索引
- MySQL 二 索引MySql索引
- Mysql索引使用MySql索引
- MySQL之索引MySql索引
- mysql新增索引MySql索引
- MySQL的索引MySql索引
- 【Mysql】MySQL · 特性分析 · Index Condition Pushdown (ICP)MySqlIndex
- 【Mysql】index extensions介紹MySqlIndex
- mysql的Covering IndexMySqlIndex
- MySQL索引系列:全文索引MySql索引
- MySQL 字串索引和字首索引MySql字串索引
- index索引Index索引
- MySQL 索引結構MySql索引
- mysql innodb索引高度MySql索引
- 淺談Mysql索引MySql索引
- MySql索引那些事MySql索引
- 【Mysql】索引簡介MySql索引