首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场

MySQL性能
EN

Stack Overflow用户
提问于 2011-04-21 00:55:11
回答 2查看 264关注 0票数 0

我们有一个数据仓库,其中包含从500K到6+百万行的非规范化表。我正在开发一个报告解决方案,因此出于性能原因,我们使用数据库分页。我们的报告有搜索标准,并且我们已经创建了必要的索引,但是,在处理百万行表时,性能很差。客户端设置为总是知道记录总数,因此我必须获取数据以及记录计数。

我还能做些什么来提高性能呢?我不是MySQL数据库管理员,他也没有提供任何东西,所以我不确定他能在配置方面做些什么。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-21 01:02:02

如果对大表进行分区,并将各部分存储在不同的服务器上,则查询的运行速度会更快。

请参阅:http://dev.mysql.com/doc/refman/5.1/en/partitioning.html

还要注意,使用NDB表,您可以使用在O(1)时间内查找到的散列键。

对于行数,您可以在一个单独的表中保存一个运行总数,并更新该表。例如在after insertafter delete触发器中。

尽管触发器会减慢删除/插入的速度,但这将随着时间的推移而传播。请注意,您不必将所有总计保存在一行中,您可以按条件存储总计。类似于:

代码语言:javascript
运行
复制
table    field    condition    row_count
----------------------------------------
table1   field1   cond_x       10
table1   field1   cond_y       20

select sum(row_count) as count_cond_xy 
from totals where field = field1 and `table` = table1 
and condition like 'cond_%';
//just a silly example you can come up with more efficient code, but I hope
//you get the gist of it.

如果你发现自己总是计算相同的条件,这可以加快你重新设计的select count(x) from bigtable where ...从几分钟到立即。

票数 0
EN

Stack Overflow用户

发布于 2011-04-21 01:03:24

你应该使用“分区”。

它的主要目标是减少特定SQL操作读取的数据量,从而缩短总体响应时间。

请参阅:

http://dev.mysql.com/tech-resources/articles/performance-partitioning.html

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5733892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档