当前位置:  开发笔记 > 后端 > 正文

什么技术对于处理数百万条记录最有效?

如何解决《什么技术对于处理数百万条记录最有效?》经验,为你挑选了2个好方法。

我曾经拥有一个包含2500万条记录的MySQL数据库表,这使得即使是简单的COUNT(*)查询也需要一分钟才能执行.我最终制作了分区,将它们分成几个表.我要问的是,是否有任何模式或设计技术来处理这类问题(大量记录)?MSSQL或Oracle在处理大量记录方面更好吗?

PS COUNT(*)上面提到的问题仅仅是一个示例案例,实际上应用程序确实是crud功能和一些聚合查询(用于报告),但没有什么真正复杂的.由于表量,执行某些查询需要相当长的时间(分钟)



1> John Milliki..:

请参阅为什么MySQL可能会因大表而慢,而COUNT(*)与COUNT(col)相比

确保您在计算的列上有索引.如果您的服务器有足够的RAM,请考虑增加MySQL的缓冲区大小.确保您的磁盘配置正确 - 启用DMA,不与交换分区共享驱动器或电缆等.



2> MarkR..:

您对"SELECT COUNT(*)"的要求并不容易.

在MySQL中,MyISAM非事务引擎通过保持记录计数来优化它,因此SELECT COUNT(*)将非常快.

但是,如果您使用的是事务引擎,则SELECT COUNT(*)基本上是这样说的:

我的交易中这个表中究竟有多少条记录?

为此,引擎需要扫描整个表格; 它可能已经大致知道表中已存在多少条记录,但为了获得特定事务的确切答案,它需要扫描.使用MySQL innodb并不会很快,在Oracle或其他任何方面都不会很快.必须读取整个表(不包括由引擎单独存储的内容,例如BLOB)

将整个表放在ram中会使它快一点,但它仍然不会很快.

如果您的应用程序依赖于频​​繁,准确的计数,您可能需要创建一个通过触发器或其他方式更新的汇总表.

如果您的应用程序依赖于频​​繁,不太准确的计数,则可以使用计划任务维护摘要数据(这可能会影响其他操作的性能).

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有