使用單獨的查詢,我可以向MySQL表添加非唯一的索引,每個索引都有自己的鍵名,就像這樣:
但是當我使用我的PHP框架(CodeIgniter 3)的資料庫鍛造類在CREATE TABLE查詢中添加幾個鍵時,它們都得到了相同的鍵名,但有不同的Seq_in_index值。
PHP代碼:
$this-> dbforge->add_key(['account_id', 'order_number'])。
//產生。KEY `estimate_id_order_number` (`estimate_id `, `order_number `)
結果鍵:
我真的不知道哪個是 "更好 "的,可以這么說。后者的表配置似乎表明,一個單一的鍵被用于索引estimate_id和order_id。
這是否會導致任何問題,例如欄位之間的模糊性?
這兩種表的設計對性能是否有影響?
什么樣的情況可能需要不同的鍵名呢?
uj5u.com熱心網友回復:
這是一個復合鍵也被稱為復合索引。在 BTREE 索引中包含多個列。
在你的案例中,鍵被包含在 BTREE 索引中。
在你的例子中,鍵被定義為
ALTER TABLE tbl
ADD KEY estimate_id_order_number (estimate_id, order_number)
鍵的名稱estimate_id_order_number只是一個名稱。如果你決定不需要它,你可以使用這個名字來丟棄這個鍵。你可以用它來提醒你該索引的目的。它在查詢計劃中顯示出來。如果你必須使用索引提示,你可以使用索引名稱。在查詢程序中,它沒有任何其他作用--沒有任何作用。
如果你有一個類似于
的查詢SELECT id FROM tbl WHERE estim_id = 123 AND order_number = 321
或者
SELECT id FROM tbl WHERE estimate_id = 123 ORDER by order_number
這個索引將使它運行得非常快:查詢可以從復合鍵中得到滿足。
。但是如果你有
SELECT id FROM tbl WHERE order_number = 321
它不會有幫助:復合索引只在有WHERE子句提到它的第一個列時有幫助。但是一個帶有(order_number, estimate_id)列的鍵會有幫助。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/311019.html
標籤:


