我正在使用现有的数据库并尝试优化它。我看到没有单个主键的表,但有两个外键用作主键。我知道它会起作用。然而,为了获得更好的性能,使用两个外键的主键(key1,key2)能够像单键一样工作更好吗?什么是MySQL主键(key1,key2)
例如:
CREATE TABLE ABC (
'xid' int(11),
'yid' int (11),
PRIMAY KEY (xid, yid)
)
does it perform the same (in terms of indexing) as:
CREATE TABLE ABC (
'id' int(11),
'yid' int (11),
'xid', int (11),
PRIMARY KEY (id),
KEY (xid, yid)
)
一些更新有
所以,我做了一些测试使用简单的查询,在三个不同的表
表妙..,有10000条记录。只有userid作为主要索引。
SELECT * FROM MYA其中userid = 12345
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE myA const PRIMARY PRIMARY 4 const 1
表MYB,是一个多到许多表,与伯id和的userid两个外键中的一个。超过50000记录
SELECT * FROM MYB其中userid = 12345
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE myB ref userid userid 4 const 53
表MYC,也是许多一对多表,但与复合主键,用户ID是两个中的一个。超过10万的记录
SELECT * FROM MYC其中userid = 12345
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE myC ALL NULL NULL NULL NULL 101289 Using where
所以,表C中居然检查所有10万条记录! (查询只返回50条记录)
有些东西我不明白......在我看来,复合材料主要是不做这项工作。
更多..
虽然我做更多的测试和“解释”,我的结论是(在MySQL),即使你设置组合键作为主键。您仍然必须为所有键明确设置索引。然后你会喜欢索引。