新手来了。更多的是设计问题。因此,在处理Mysql数据库中的大型数据集时,我必须选择下列存储方式之一以获得更好的性能(我倾向于多次检查记录的类型)
1)两列--一列用于记录的类型(varchar(11))和值(int (11))
eg: type="one", value= 12
2)合并列并在值前面加上类型
eg: value="one_12"
哪一种方法似乎更可行?谢谢你的帮助。
发布于 2014-05-14 15:03:33
方法1更好,因为您需要多次使用记录类型进行查询。方法2的性能问题,因为每次需要执行字符串操作时,都需要从数据中提取记录类型,然后进行匹配。
发布于 2014-05-14 15:06:21
显然,第一种变体。第二种方法扼杀了数据结构和关系数据库的思想。从阅读数据库归一化开始。
发布于 2014-05-14 15:07:34
我推荐第一种方法。您可能会将类型存储在事实表中,并将其加入到原始数据中。如果是这样的话,它将需要更少的存储代表较大的表来存储一个小的整数值,并且(假设您在( value,type)上创建一个索引)加入事实表将是非常有效和快速的。
换句话说,我推荐以下内容
数据表: id,数据,更多数据,type_value
类型表: type_value,键入
使用( type,type_value)上的复合索引(也称为复合索引)对类型表进行索引。那么你的加入就可以利用一个覆盖指数,例如,
SELECT a.*
FROM data AS A
INNER JOIN type AS b
ON a.type_value = b.type_value
WHERE b.type = ?
注意,顺序在MySQL中的复合索引中很重要。因此,如果目标确实是评估WHERE b.type = "One"
(例如),您将希望索引(类型,type_value),而不是相反。这将使您可以筛选类型表并从索引中应用id值,而无需诉诸索引合并。
https://stackoverflow.com/questions/23658258
复制相似问题