MySQL的索引分析
MySQL的索引的分類:
一、單值索引(普通索引)
二、唯一索引
三、複合索引
四、主鍵索引
五、Full-text索引(全文索引)
單值索引
普通索引:即只包含一個列的索引,一個表可有多個單值索引
建立索引的語句:
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 ,
`name` char(255) CHARACTER NOT NULL ,
PRIMARY KEY (`id`),
INDEX index_name (name(length))
)
唯一索引
索引的值必須是唯一的,但是允許有空值
建立索引的語句:
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 ,
`name` char(255) CHARACTER NOT NULL ,
UNIQUE indexName (name(length))
);
複合索引
一個索引包含多個列,但是使用複合索引的時候需要遵循最佳左字首法則(即查詢從索引最左列開始,並且不跳過索引中的列)
建立索引的語句:
ALTER TABLE `table` ADD INDEX name_addr_age (name,addr,age);
主鍵索引
特殊的一種索引,不允許有空值,在表建立時便同時建立
Full-text索引(全文索引)
主要是用來查詢文字中的關鍵字,只有在char varchar text的列上建立該索引
(tips:如果在建立大資料量的表的時候,建議先插入資料再建該索引)
(原因:索引便於查詢,但是對於增刪頻繁的表來說會變得更消耗效能)
建立索引的語句:
CREATE FULLTEXT INDEX index_content ON table(content)
或
ALTER TABLE table ADD FULLTEXT index_content(content)
或
CREATE TABLE `table` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`content` text CHARACTER NULL ,
PRIMARY KEY (`id`),
FULLTEXT (content)
);
需要建立索引的情況
1. 頻繁作為查詢的欄位
2. 外來鍵關係
3. 查詢中排序的欄位,排序欄位如果通過索引進行查詢會提高排序的效率
4. 查詢中統計或分組欄位
待補充!!!
不需要建立索引的情況
1. 表記錄太少
2. 經常增刪的表(因為更新表的時候,會同時更新索引,儲存索引的檔案,加重IO負擔)
3. 資料列中的內容重複且分佈平均
待補充!!!
索引失效的情況
1. 複合索引使用時不遵循最佳左字首法則
2. 在索引列上進行計算、函式、型別轉換(包含隱式)會導致索引失效而進行全表掃描
3. 減少使用select *
4. like “%aaa%” 不會使用索引而like “aaa%”可以使用索引
5. 字串不加單引號會導致索引失效
6. Is null和is not null 會導致索引失效
待補充!!!
相關文章
- MySQL索引效能分析MySql索引
- MySQL的索引優化分析(一)MySql索引優化
- MySQL的索引優化分析(二)MySql索引優化
- 2 mysql索引優化分析MySql索引優化
- MySQL 索引 效能分析 show profilesMySql索引
- MySQL 5.7 ANALYZE TABLE分析索引的統計資訊MySql索引
- MySQL的索引MySql索引
- MySQL全面瓦解22:索引的介紹和原理分析MySql索引
- mysql 執行計劃索引分析筆記MySql索引筆記
- 【索引】使用索引分析快速得到索引的基本資訊索引
- MySQL索引(二):建索引的原則MySql索引
- 面試必備之MYSQL索引底層原理分析面試MySql索引
- 跳槽必看MySQL索引:B+樹原理揭秘與索引優缺點分析MySql索引
- mysql索引之字首索引MySql索引
- ElasticSearch 索引 VS MySQL 索引Elasticsearch索引MySql
- MySQL — 索引MySql索引
- MySQL 索引MySql索引
- mysql索引MySql索引
- [Mysql]索引MySql索引
- mysql 索引( mysql index )MySql索引Index
- MySQL的btree索引和hash索引的區別MySql索引
- MySQL索引的型別MySql索引型別
- MySQL索引的結構MySql索引
- Mysql 索引的分類MySql索引
- MySQL的聯合索引MySql索引
- mysql的組合索引MySql索引
- Mysql索引優化之索引的分類MySql索引優化
- 索引分析索引
- MySQL建立索引、修改索引、刪除索引的命令語句MySql索引
- Oracle表與索引的分析及索引重建Oracle索引
- 分析RavenDB的索引功能索引
- MySQL索引系列:全文索引MySql索引
- MySQL 字串索引和字首索引MySql字串索引
- 【Mysql】InnoDB 中的聚簇索引、二級索引、聯合索引MySql索引
- oracle 索引分析及索引重建Oracle索引
- MySQL 索引 +explainMySql索引AI
- MySQL索引原理MySql索引
- MySQL InnoDB 索引MySql索引