繁体   English   中英

MySQL性能调优

[英]MySQL performance tuning

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

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

   eg: type="one", value= 12

2)合并列并在值之前添加类型

   eg: value="one_12"

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

显然,第一个变种。 第二个概念扼杀了数据结构和关系数据库的思想。 从阅读有关数据库规范化开始

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

我会建议方法一。 大概您会将类型存储在事实表中,并将其加入到原始数据中。 如果是这样,它将需要代表较大的表进行更少的存储来存储较小的整数值,并且(假设您在(值,类型)上创建了索引)连接到事实表将非常高效且快速。

换句话说,我建议类似以下内容

数据表:id,数据,更多数据,type_value

类型表:type_value,类型

在(type,type_value)上使用复合(aka aka aka multicolumn)索引来索引类型表。 然后,您的联接可以利用覆盖指数,例如,

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值,而无需求助于索引合并。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM