有几个DBEngines可用于MySQL DB。目前我使用的是InnoDB。我的实际问题是我有一个包含数百万数据的表。因此,提供给这个表的select查询非常慢。我需要知道应该使用哪种配置来使select查询更快,同时又不影响插入速度。
发布于 2014-05-27 13:54:31
这有点棘手。在此之前,我也遇到了这种问题,最终使用了主从复制。Master处理所有插入,slaves处理所有选择。我所做的是将索引放在从服务器上,以使选择更快。那么主节点将不会有任何索引。除了外键和主键。有时只需要反复试验就可以让数据库运行得更快。
您还可以尝试分区和集群。
发布于 2014-05-27 14:00:53
基本上,您应该开始在表上使用索引,例如,如果您按名称查询,则应该为名称列建立索引。如果使用and子句按名称和某个数字进行查询,则应从不太复杂的列( number )开始创建复合索引。
要找出索引是否丢失,请检查查询执行计划。有关这方面的详细信息,请查看http://dev.mysql.com/doc/refman/5.5/en/execution-plan-information.html和后续章节-
请注意,mysql不支持升序和降序混合索引(例如name ASC,createdate DESC),所以如果你运气不好,你必须摆弄一些辅助表。
最后,如果表中没有外键,可以考虑使用分区表。分区是有意义的,当您的数据可以被分成几个“块”时,如果大多数查询能够将所选数据缩小为几个这样的块,则分区可以大大加快查询速度。有关这方面的详细信息,我建议您访问http://dev.mysql.com/doc/refman/5.5/en/partitioning.html。
在服务器端,检查内存配置。如果您的数据量很大,请检查您的查询是否有ORDER BY子句。如果是,检查是否应该增加排序缓冲区(否则db服务器开始在磁盘上排序,这就像地狱一样慢)。为此,请检查http://dev.mysql.com/doc/refman/5.0/en/server-parameters.html
不幸的是,你的请求有点模糊,应用这些机制总是高度特定于你的需求,但你可以自由地将更多细节(例如表结构,慢查询等)应用到你的请求中,以获得更具体的提示。
发布于 2014-05-27 14:05:07
有一些GUI工具可以帮助你做到这一点,但这是一项技术熟练且范围广泛的工作。因此,它们不会涵盖所有内容,您可能需要使用命令行内容/sql语句等来提供帮助。我可以用来帮助你的一些石灰灯是:
即兴制作和增强工具:
mysql
https://stackoverflow.com/questions/23881878
复制相似问题