一、MYSQL的索引
索引(Index):幫助Mysql高效獲取數據的一種數據結構。用于提高查找效率,可以比作字典??梢院唵卫斫鉃榕藕眯虻目焖俨檎业臄祿Y構。
索引的作用:便于查詢和排序(所以添加索引會影響where 語句與 order by 排序語句)。
在數據之外,數據庫還維護著滿足特定查找算法的數據結構,這些數據結構以某種方式引用數據。這樣就可以在這些數據結構上實現高級查找算法。這些數據結構就是索引。
索引本身也很大,不可能全部存儲在內存中,所以索引往往以索引文件的形式存儲在磁盤上。
我們平時所說的索引,如果沒有特別指明,一般都是B樹索引。(聚集索引、復合索引、前綴索引、唯一索引默認都是B+樹索引),除了B樹索引還有哈希索引。
優點:
A、提高數據檢索效率,降低數據庫的IO成本
B、通過索引列對數據進行排序,降低了數據排序成本,降低了CPU的消耗。
缺點:
A、索引也是一張表,該表保存了主鍵與索引字段,并指向實體表的記錄,所以索引也是占用空間的。
B、對表進行INSERT、UPDATE、DELETE操作時,MYSQL不僅會更新數據,還要保存一下索引文件每次更新添加了索引列字段的相應信息。
在實際的生產環境中我們需要逐步分析,優化建立最優的索引,并要優化我們的查詢條件。
索引的分類:
1、單值索引 一個索引只包含一個字段,一個表可以有多個單列索引。
2、唯一索引 索引列的值必須唯一,但允許有空值。
3、復合索引 一個索引包含多個列
一張表建議建立5個之內的索引
語法:
1、CREATE [UNIQUE] INDEX indexName ON myTable (columnName(length));
2、ALTER myTable Add [UNIQUE] INDEX [indexName] ON (columnName(length));
刪除:DROP INDEX [indexName] ON myTable;
查看: SHOW INDEX FROM table_name/G;
二、EXPLAIN 的作用
EXPLAIN :模擬Mysql優化器是如何執行SQL查詢語句的,從而知道Mysql是如何處理你的SQL語句的。分析你的查詢語句或是表結構的性能瓶頸。
| mysql> explain select * from tb_user;+----+-------------+---------+------+---------------+------+---------+------+------+-------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |+----+-------------+---------+------+---------------+------+---------+------+------+-------+| 1 | SIMPLE | tb_user | ALL | NULL | NULL | NULL | NULL | 1 | NULL |+----+-------------+---------+------+---------------+------+---------+------+------+-------+ |
(一)id列:
(1)、id 相同執行順序由上到下
| mysql> explain -> SELECT*FROM tb_order tb1 -> LEFT JOIN tb_product tb2 ON tb1.tb_product_id = tb2.id -> LEFT JOIN tb_user tb3 ON tb1.tb_user_id = tb3.id;+----+-------------+-------+--------+---------------+---------+---------+---------------------------+------+-------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |+----+-------------+-------+--------+---------------+---------+---------+---------------------------+------+-------+| 1 | SIMPLE | tb1 | ALL | NULL | NULL | NULL | NULL | 1 | NULL || 1 | SIMPLE | tb2 | eq_ref | PRIMARY | PRIMARY | 4 | product.tb1.tb_product_id | 1 | NULL || 1 | SIMPLE | tb3 | eq_ref | PRIMARY | PRIMARY | 4 | product.tb1.tb_user_id | 1 | NULL |+----+-------------+-------+--------+---------------+---------+---------+---------------------------+------+-------+ |