簡體   English   中英

我需要在復合主鍵的第二列上建立索引嗎?

[英]Do I need an index on the second column of a compound primary key?

我的架構如下所示 -

CREATE TABLE `products` (
    `account_id` varchar(100) NOT NULL,
    `product_id` int NOT NULL,
    `product_name` varchar(100) NOT NULL,
    PRIMARY KEY (`account_id`,`product_id`),
    KEY `idx_product_id` (`product_id`)
) 

該應用程序將有多個帳戶(客戶),每個客戶都將擁有自己的產品,例如多租戶電子商務網站。 產品本身沒有任何意義,只有與account_id相關聯才有意義。 賬戶 A(客戶 A)可以有產品 1,賬戶 B 也可以有產品 1。但是 Account 和 Product 的組合應該是唯一的,因此主鍵在account_idproduct_id上。

我知道account_id不需要索引,因為主鍵會在account_id / product_id組合上創建索引。 我認為在product_id上也不需要單獨的附加索引,因為產品將始終在帳戶的上下文中被引用,並且主鍵索引可以解決這個問題。

  1. 我可以提前 go 並從上面的表模式中刪除KEY idx_product_id (product_id)嗎?

  2. 一般來說,我們需要在復合主鍵的第二列上建立索引嗎?

想想電話簿。 這就像(last_name, first_name)上的索引。 如果您按姓氏查找一個人,那么首先按姓氏排序非常有幫助。 如果您同時按姓氏和名字查找一個人,這也很有幫助。

但是,如果您使用電話簿試圖僅通過他們的名字來查找某人,那么這本書將無濟於事。 它不按名字排序。 這是一個問題嗎? 你會通過他們的名字來查找某人嗎? 如果您需要這樣做,您將需要按名字排序的第二個電話簿。 但是,如果您從不需要進行這種查找,則不需要它。

二級索引也是如此。 如果您總是按帳戶然后按產品查找產品,那么主鍵的排序順序就足夠了。 如果您有時查找產品以查看哪些帳戶使用該產品,那么首先使用product_id的二級索引會有所幫助。

因此,您的問題的答案取決於您打算運行的查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM