現在我們有個查詢語句:select * from pyment where staff_id = 2 and customer_id = 584;
是應該建立乙個(staff_id,customer_id)索引還是應該顛倒一下順序。
此時,有i乙個方法,我們可以看下staff_id和customer_id的全域性選擇性:
mysql> select count(distinct staff_id)/count(*) as staff_if_selectivity,
->count(distanct customer_id)/count(*) as customer_id_selectivity,
->count(*)
staff_id_selectivity:0.0001
customer_id_selectivity:0.0373
cout(*):16049
customer_id的選擇性更高,所以答案是將其作為索引列的第一列:
mysql>alert table payment add key(customer_id,staff_id);
.具體的場景中,我們還需要根據,到底那一列使用頻率較高。讓復合索引同時提供單列索引的效果。要結合實際情況去做選擇。
復合索引的列順序判斷
復合索引最令人困惑的當屬索引列的順序,不僅依賴於使用該索引的查詢,更需考慮排序和分組。前段時候我發了個帖子 where條件順序和復合索引字段順序。感興趣的朋友不妨參與討論。今天我提個自己的觀點。在應用開發階段,選擇性 是我們首要考慮因素,請看簡圖 當出現sql效能問題時,你可能需要注意以下幾個 1....
MySQL復合索引前導列特性
在有些文章中也稱之為 索引的最佳左字首特性 叫什麼不重要,重要的是要理解他,會去運用他 柳峰老師 建立乙個復合索引 create index idx name salary dept on employee name,salary,dept 查詢資料 mysql explain select fro...
mysql中復合索引語法 MySQL 復合索引
mysql 復合索引 簡介 在本例中,您將了解mysql組合索引以及如何使用它來加速查詢。mysql復合索引簡介 復合索引是多列的索引。mysql允許您建立乙個最多包含16列的復合索引。復合索引也稱為多列索引。查詢優化器將復合索引用於測試索引中所有列的查詢,或者測試第一列,前兩列等的查詢。如果在索引...