首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL性能调优

MySQL性能调优
EN

Stack Overflow用户
提问于 2014-05-14 14:56:21
回答 4查看 180关注 0票数 1

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

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

代码语言:javascript
运行
复制
   eg: type="one", value= 12

2)合并列并在值前面加上类型

代码语言:javascript
运行
复制
   eg: value="one_12"

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-05-14 15:03:33

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

票数 3
EN

Stack Overflow用户

发布于 2014-05-14 15:06:21

显然,第一种变体。第二种方法扼杀了数据结构和关系数据库的思想。从阅读数据库归一化开始。

票数 4
EN

Stack Overflow用户

发布于 2014-05-14 15:07:34

我推荐第一种方法。您可能会将类型存储在事实表中,并将其加入到原始数据中。如果是这样的话,它将需要更少的存储代表较大的表来存储一个小的整数值,并且(假设您在( value,type)上创建一个索引)加入事实表将是非常有效和快速的。

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

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

类型表: type_value,键入

使用( type,type_value)上的复合索引(也称为复合索引)对类型表进行索引。那么你的加入就可以利用一个覆盖指数,例如,

代码语言:javascript
运行
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23658258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档