大型 MySQL 数据库 [关闭]
Posted
技术标签:
【中文标题】大型 MySQL 数据库 [关闭]【英文标题】:Massive MySQL database [closed] 【发布时间】:2011-03-27 01:18:51 【问题描述】:我正在创建一个网站,它需要一个绝对庞大的 mysql 数据库,一个表中可能有数百万甚至数十亿行。
表格结构是两个“文本”字段。
如何优化查询?我希望一次只能获取一行,但要尽可能快。
一个字段可能有稍长的文本块,但另一个字段总是相对较短,并且任何行选择都将基于另一个字段。
或者,有没有更好的方法来存储这么多值?
感谢您的帮助!
【问题讨论】:
"甚至数十亿行在一个表中" - "表结构是两个“文本”字段。" - 听起来像一个仓库 你想存储什么,你到底用它做什么?也许如果我们知道更多的上下文,我们可以提供更多帮助。 【参考方案1】:所以本质上,要获取一行,您将执行以下操作:
SELECT * FROM myTable WHERE col1 = "someText";
正确吗?如果是这样,那么您真正可以应用的唯一优化是在col1
上添加索引。
但是,您的数据是否会以某种方式自然分离?是否存在任何逻辑组?如果是这样,您可以将其分解为多个表并在它们之间分配数据。
如果不是,那么您可以始终根据 col1
中的第一个字符之类的内容进行隔离,假设此处的值始终在某个合理的范围内(例如 [a-z]
)。然后您可以执行以下操作:
SELECT * FROM myTable_s WHERE col1 = "someText";
SELECT * FROM myTable_o WHERE col1 = "otherText";
对于非常大的数据集,拥有多个小表并以编程方式在它们之间进行选择将比拥有一个包含所有内容的大表更快。
【讨论】:
那很好,我可能会去。【参考方案2】:优化它的唯一方法是不使用文本,而是为您的列使用 varchar[size] 但这只有在大小具有可重新分区限制时才有可能(如果它是大索引将不会那么有效,并且 varchar[size] 具有与文本不同的固定大小)
当然最好的方法是使用简短的搜索,对于一个有数百万表的表,我只能推荐使用 int 作为主键,即使这意味着你必须添加一个新列
【讨论】:
【参考方案3】:在数据库方面,我远非专家,但如果您基于单个字段选择单行,我会假设该字段可能是唯一的?在该字段上创建一个哈希索引可能是一个好主意,尽管我不确定它在数百万行的情况下能保持多久。
【讨论】:
以上是关于大型 MySQL 数据库 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
Cassandra是否已经为大型项目的生产环境做好了准备和成熟的准备? [关闭]
MySQL - 备份超过 90 天的数据的最佳方式 [关闭]