mysql - 大数据量数据库设计

标签 mysql database performance database-design

我正在从事一个涉及美味网站大量数据的项目。可用数据是“Date, UserId, Url, Tags”(对于每个书签)。

我将我的数据库规范化为 3NF,并且由于我们想要组合使用的查询的性质,我减少到 6 个表......设计看起来不错,但是,现在有大量数据在数据库中,大多数查询需要至少将 2 个表连接在一起才能得到答案,有时是 3 个或 4 个。起初,我们没有任何性能问题,因为对于测试事项我们没有添加太多数据到数据库。现在我们有很多数据,简单地连接非常大的表会花费很多时间,对于我们必须是实时的项目来说,这是一场灾难。

我想知道大公司是如何解决这些问题的。看起来规范化表只会增加复杂性,但是大公司如何处理数据库中的大量数据,他们不使用规范化吗?

谢谢。

最佳答案

由于您问及大公司(通常)如何处理此问题:

他们通常有一个 dba(数据库管理员),他与公司使用的数据库息息相关。

这意味着他们拥有无所不知的人员,从如何优化表设计、分析和调整查询/索引/操作系统/服务器,到知道 RAID Controller 的哪个固件版本可能导致数据库出现问题。

你不多说你做了什么样的调优,e.g.

  • 您使用的是 MyISAM 还是 InnoDB 表?对于不同的工作负载,它们的性能(尤其是它们的功能)截然不同。
  • 是否根据您运行的查询正确地为表编制了索引?
  • 对所有查询运行 EXPLAIN - 这将帮助您识别可以添加/删除的键,是否选择了正确的键,比较查询(SQL 为您提供了很多方法来完成相同的事情)
  • 你调整过查询缓存了吗?对于某些工作负载,查询缓存(默认开启)可能会导致相当大的速度下降。
  • 你的盒子有多少内存,mysql 是否调整为利用它?
  • 您是否使用面向数据库的文件系统和 raid 设置?
  • 有时需要一些反规范化。
  • 不同的数据库产品会有不同的特点,MySQL 可能对一些世界来说快得惊人,而对另一些则慢一些。

关于mysql - 大数据量数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2611617/

相关文章:

mysql - MySQL 中何时使用单引号、双引号和反引号

php - MySQL PHP 显示对话中按父记录分组的所有消息

php - stroftime 代码不在新的网络服务器上显示日期

.net - Linq后期处理行为

python - SQLAlchemy - 当 count() 说还有更多结果时只返回一个结果

performance - 当我将slice参数作为值或指针传递时,为什么会有性能差异?

java - 将 Integer ArrayList 作为 Intent 额外发送的最佳方式?

php - 在页面上显示新记录数

php - 语言翻译语法

java - 将大量小文件读入内存的最快方法是什么?