我有一个包含700000行和400列的表,列id已编入索引,其他列是动态的。
当我给出
时select * from table
需要4分钟以上。表是myisam引擎,我尝试增加key_buffer_size
,这没什么用。我可以优化哪些其他参数来加快速度
答案 0 :(得分:5)
运行查询的最大问题是填充响应。无论表格下面的基本效率是什么,即使只有很少的字段有数据,你将在表格中每行返回400个单元格记录 - 因此,你必须发送280M单元格在4分钟内,这意味着~120个细胞/秒。
key_buffer_size将不执行任何操作,因为您只是流式传输您的表(.MYD)文件,该文件未缓存在密钥缓存中,并且只有OS缓冲区。
所以,如果你想让它更快,你可能想要:
如果您不想要上述任何一项并希望您的工作量更快,则必须同时进行阅读。
如果您通常不按列的值过滤/索引,可以将它们放在以任何其他方式打包的BLOB字段中(Thrift,Protobufs,JSON等),这样就不会读取该数据导致疯狂的协议开销,你将能够更快地读取你的表。