我正在制作一个网站,它需要一个绝对庞大的mysql数据库,在一个表中可能有数百万甚至数十亿行。
表结构是两个“文本”字段。
如何针对查询进行优化?我希望一次只能提取一行,但要尽可能快。
一个字段可能有稍长的文本块,但另一个字段始终有一个相对较短的文本块,并且任何行选择都将基于另一个进行。
或者,有没有更好的方法来存储这么多的值?
谢谢你的帮助!
发布于 2011-03-27 09:36:50
因此,从本质上讲,要获取行,您将执行如下操作:
SELECT * FROM myTable WHERE col1 = "someText";
对吗?如果是这样,那么您可以真正应用的惟一优化就是在col1上添加一个索引。
但是,你的数据是以某种方式自然分离的吗?是否存在任何逻辑组?如果是这样的话,您可以将其分解为多个表,并在它们之间分发数据。
或者,如果不是这样,那么您可以始终根据col1中的第一个字符进行分隔,假设此处的值始终在某个合理的范围内(如[a-z])。然后你可以这样做:
SELECT * FROM myTable_s WHERE col1 = "someText";
SELECT * FROM myTable_o WHERE col1 = "otherText";
对于非常大的数据集,拥有多个小表并以编程方式在它们之间进行选择将比拥有一个包含所有内容的大表要快。
发布于 2011-03-27 09:25:16
优化它的唯一方法是不使用文本,而是对列使用varcharsize,但只有当大小有一个可调整的限制时,这才是可能的(如果它是大索引,则不像文本,varcharsize有固定的大小)
当然,最好的方法是使用简短的方式进行搜索,对于包含数百万个表的表,我只能建议使用int作为主键,即使这意味着您必须添加一个新列
发布于 2011-03-27 09:29:55
当涉及到数据库时,我远不是专家,但如果您基于单个字段选择单行,我会假设该字段可能是唯一的?在该字段上创建一个散列索引可能是一个好主意,尽管我不确定一旦有数百万行,这会有多好。
https://stackoverflow.com/questions/5446558
复制相似问题