首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于数据库性能

关于数据库性能
EN

Stack Overflow用户
提问于 2010-07-12 04:29:10
回答 3查看 165关注 0票数 0

早上好,

我现在正在写我的硕士论文,因此我必须证明我所做的每一个总体评估都是正确的。

我在MySQL中有一个平面数据库,它最初由以下字段组成

  1. 日期(日期)
  2. 姓名(VARCHAR(50))
  3. 价值(双倍)

表的PK是第1列和第2列的组合。

问题是,我很快就有超过4000万行,而我对一个名字的所有记录的查询花费了很长时间。

因此,我决定创建一个“索引表”(我认为这个术语是正确的),其中存储名称和ID之间的映射:

  1. ID (INT)
  2. 姓名(VARCHAR 50)

我把最初的表改为

  1. 日期(日期)
  2. ID (INT)
  3. 价值(双倍)

通过这种方式,我可以首先找到我正在寻找的记录的ID,然后非常快地在大型表上运行一个查询(性能确实要好得多)。

我认为这是因为整数之间的比较比字符串之间的比较容易得多,但是我正在寻找一些文献来支持这种评估(理想情况下是一些数据库结构书籍)。

你认为我的评估是正确的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-12 04:47:52

部分问题是,复合键(例如日期、名称PK)是通过连接索引值(参见http://dev.mysql.com/doc/refman/5.1/en/create-index.html)创建的,而名称(您在这里查找的主要内容)是第二个。这使得按名称查找数据需要做更多的工作,因为索引不会按名称排序--它将按日期排序,然后按名称排序,这意味着mysqld必须搜索整个索引,而不是仅仅抓取PK位于"Jack,0000-00-00“和"Jack,9999-12-31”之间的部分。

如果只为名称添加了一个索引,或者至少将PK切换到(名称、日期),您可能会发现原来的表运行得更好。

或者,如果您对日期ID表做了同样的事情,它应该会更快,因为您几乎消除了字符串比较。

票数 1
EN

Stack Overflow用户

发布于 2010-07-12 04:57:40

假设"Name“字段的数据有很多重复,您的查询性能就会提高,因为整数比较比字符串比较快,而且您大大减少了日期表的大小。这意味着更少的内存分页和更少的磁盘查找。

如果name表有N行,则需要进行N个字符串比较,加上4,000万个整数比较,而不是4,000万个字符串比较。若要进一步提高查询性能,应为日期表的ID字段添加索引。

代码语言:javascript
复制
CREATE INDEX date_id_index ON date_table (ID)
票数 1
EN

Stack Overflow用户

发布于 2010-07-12 06:05:15

至于书籍,如果你想要高级的SQL知识的话,Lex和Toon的数据库专业人员应用数学确实是一本好书。我应该指出,你不只是“提到”书,你读了它们,并使用它们作为参考-只是参考书籍,因为它们听起来很酷,但不读它们会回来咬你的屁股。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3225877

复制
相关文章

相似问题

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