MySQL性能调优

时间:2014-05-14 14:56:22

标签: mysql database-design

新手在这里。更多的设计问题。因此,在处理Mysql数据库中的大型数据集时,我必须选择以下存储方法之一以获得更好的性能(我倾向于多次检查记录的类型)

1)两列 - 一列用于记录类型(varchar(11))和值(int(11))

   eg: type="one", value= 12

2)合并列并在值

之前添加类型
   eg: value="one_12"

哪种方法似乎更可行?谢谢你的帮助。

4 个答案:

答案 0 :(得分:4)

显然,第一个变种。第二个杀死数据结构和关系数据库的想法。 首先阅读有关数据库normalization的信息。

答案 1 :(得分:3)

方法1更好,因为您需要多次查询记录类型。 方法2的性能问题因为每次需要进行字符串操作以从数据中提取记录类型然后匹配

答案 2 :(得分:1)

我建议采用第一种方法。假设您将类型存储在事实表中并将其与原始数据相连接。如果是这样,代表较大的表将需要更少的存储来存储一个小的整数值(假设您在(值,类型)上创建索引)加入事实表将是非常有效和快速的。

换句话说,我推荐以下内容

数据表: 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,type_value),而不是相反。这样就可以过滤你的类型表并从索引中应用id值,而无需求助于索引合并。

答案 3 :(得分:1)

方法1优于第二方法。但如果你有定义的类型列表,这是我的建议。

为类型(int type_id,varchar类型)创建一个新表,并为类型varchar列建立索引。在实际表中使用外键引用。这是处理表变大的理想方式。