Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 提高数据库性能(或)避免自动生成主键的数据库表的性能问题_Java_Sql_Performance_Jdbc - Fatal编程技术网

Java 提高数据库性能(或)避免自动生成主键的数据库表的性能问题

Java 提高数据库性能(或)避免自动生成主键的数据库表的性能问题,java,sql,performance,jdbc,Java,Sql,Performance,Jdbc,我们的应用程序有一个表,它将客户机的所有事务记录存储在一个数据库表中,该数据库表具有一个自动生成的键作为主键。我们现在开始每天收到大约25K条记录,我开始怀疑这是否会在某个时候导致性能问题 背景: 交易表包含我们的客户(在现实世界中,他们是食品供应商{比如Kellogs谷类食品}和分销商{比如沃尔玛})每天执行的每笔交易的所有详细信息。最初,设计没有指定任何逻辑/功能字段作为事务的主键,因此DB开发人员继续添加自动生成的键以“填充”主键。由于客户端需要在前端拥有所有信息,因此查询总是SELECT

我们的应用程序有一个表,它将客户机的所有事务记录存储在一个数据库表中,该数据库表具有一个自动生成的键作为主键。我们现在开始每天收到大约25K条记录,我开始怀疑这是否会在某个时候导致性能问题

背景:
交易表包含我们的客户(在现实世界中,他们是食品供应商{比如Kellogs谷类食品}和分销商{比如沃尔玛})每天执行的每笔交易的所有详细信息。最初,设计没有指定任何逻辑/功能字段作为事务的主键,因此DB开发人员继续添加自动生成的键以“填充”主键。由于客户端需要在前端拥有所有信息,因此查询总是
SELECT*fromtransactions
。该表有近80列,现在已增长到100K条记录

数据库:Oracle 11g
在Java 1.5中实现的核心业务逻辑(用于查询的JDBC驱动程序)
前端:SmartGWT

查询:

假设所有的记录都会在某个时间开始敲击性能,我想寻找任何数据库设计/查询调整/一般建议,我应该考虑避免性能问题或提高模块的性能。

< P> Oracle 11允许您创建间隔分区。我认为事务日期是分区键的一个很好的候选者。我不认为有任何理由(至少每次)向最终用户显示所有事务。通常只显示上周/月份的数据就足够了。。。检索事务的完整列表可以采用不同的处理方式(存储合并余额、使用保存历史数据的只读表等)。

此外,在一个表中有80列对我来说似乎很可疑。

如果您还没有这样做,我建议在供应商ID上添加一个索引,并将查询更改为:

SELECT * FROM TRANSACTIONS WHERE VENDOR_ID = :Vendor

如果只想按时间查询,那么唯一明智的做法是按日期的范围进行划分;此外,您显然应该一次只查询X行(前端通常使用某种分页)。拥有自动生成的PK不会对性能产生任何影响。同意@viruzzo,你不应该怀疑10万行,想想eBay吧!还有,你真的需要80列吗?在不知道模型的情况下是无法判断的,但我怀疑它们对大多数行都有意义,并且每次都需要查询它们。假设每行只占用10字节。您有80列和10万行。这使得80 MB的数据必须从数据库传输到客户端的浏览器。它不仅会非常慢,而且会使浏览器的内存爆炸,显示一大堆不可用的数据。谁能在不查询的情况下处理100000行数据?开始设计一个真正的GUI,使用数据库启用搜索、过滤和排序。