我正在建立一个网站,它需要一个绝对庞大的mysql数据库,在一个表中可能有数百万甚至数十亿行。
表结构是两个“文本”字段。
如何针对查询进行优化?我希望能够一次只获取一行,但是要尽可能快。
一个字段可能有稍长的文本块,但另一个字段总是有一个相对较短的字段,任何行选择都将基于另一个字段完成。
或者,是否有更好的方法来存储这么多值?
感谢您的帮助!
答案 0 :(得分:3)
因此,实质上,要获取一行,您将执行以下操作:
SELECT * FROM myTable WHERE col1 = "someText";
这是对的吗?如果是这样,那么您可以真正应用的唯一优化是在col1
上添加索引。
但是,您的数据是否会以某种方式自然隔离?是否存在任何逻辑组?如果是这样,您可以将其分解为多个表并在它们之间分配数据。
如果没有,那么你总是可以根据col1
中的第一个字符进行隔离,假设这里的值总是在一个合理的范围内(如[a-z]
)。然后你可以做以下事情:
SELECT * FROM myTable_s WHERE col1 = "someText";
SELECT * FROM myTable_o WHERE col1 = "otherText";
拥有多个小表并以编程方式在它们之间进行选择将比拥有其中所有内容的单个大表更快,对于非常大的数据集。
答案 1 :(得分:0)
优化它的唯一方法是不为列使用text而是varchar [size] 但这只有在大小具有可重新限制的限制时才有可能(如果大型索引不会那么有效,并且varchar [size]具有与文本不同的固定大小)
当然最好的方法是使用简短的搜索内容,使用包含数百万个表的表我只能建议使用int作为主键,即使这意味着你必须添加新列
答案 2 :(得分:0)
在数据库方面,我远不是专家,但如果您根据单个字段选择单行,我会假设该字段可能是唯一的?在该字段上创建哈希索引可能是一个好主意,尽管我不确定在数百万行中它会保持多久。