一、索引基礎知識
索引是資料庫中常用的優化方式之一,可以提高查詢的效率。比如在表中定義了一個唯一性索引,那麼在插入數據時,如果插入的數據的索引列有重複,那麼就會報錯。而在大數據量的情況下,沒有索引的查詢很可能會需要掃描整張表甚至多張表,導致查詢速度很慢。
在MySQL中,索引分為普通索引(INDEX)、唯一索引(UNIQUE)、全文索引(FULLTEXT)等。其中,唯一索引和普通索引的最大區別就是唯一索引要求列的取值是唯一的,而普通索引則不要求。
二、影響索引效率的因素
1、冗餘索引。在表中建立過多的索引,不但會增加索引維護的負擔,更重要的是會降低插入、更新和刪除操作的效率。
2、數據分布不均勻。比如在查詢某個城市的人口數量時,如果該城市的人口數量很小,而索引列又是該城市的名稱,查詢效率就會很低。
3、過長的索引列。索引列過長也會對查詢性能產生影響。
三、MySQL中修改索引的方法
1、添加索引
添加索引可以通過ALTER語句實現。比如在people表的name列上添加索引:
ALTER TABLE people ADD INDEX name_idx(name);
其中,people為表名,name為索引列名,name_idx為索引名稱。
2、修改索引
MySQL中可以修改索引名稱、索引類型、索引列等。其中,修改索引列比較麻煩,需要先刪除原來的索引,再重新創建索引。比如在people表的name列上刪除索引,並新增在age列上添加索引:
ALTER TABLE people DROP INDEX name_idx; ALTER TABLE people ADD INDEX age_idx(age);
3、刪除索引
刪除索引可以通過ALTER語句實現。比如刪除people表上的name列的索引:
ALTER TABLE people DROP INDEX name_idx;
四、使用explain查看SQL執行計劃
使用EXPLAIN關鍵字可以查看SQL語句的執行計劃,看看優化器是如何執行SQL語句的,可以用來分析查詢效率問題和索引問題。執行計劃可以看到查詢使用了哪些索引,以及使用的索引的類型(全表掃描、索引掃描等)。可以根據執行計劃來判定一個SQL語句是否需要優化,以及該優化的方向。
比如,查詢people表中age為20歲的人,可以使用以下SQL語句查看執行計劃:
EXPLAIN SELECT * FROM people WHERE age=20;
執行計劃的結果如下:
+------+-------------+--------+-------+---------------+------+---------+------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +------+-------------+--------+-------+---------------+------+---------+------+------+-------------+ | 1 | SIMPLE | people | index | NULL | age | 4 | NULL | 1 | Using index | +------+-------------+--------+-------+---------------+------+---------+------+------+-------------+
從執行計劃中可以看到,使用了age索引,索引類型為index,查詢了1條記錄,標註為Using index。
五、總結
MySQL中索引的使用和優化是提升查詢效率的重要手段之一。添加、刪除、修改索引,以及使用explain查看SQL執行計劃,是MySQL中操作索引的重要方式。
原創文章,作者:UJARD,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/332660.html