1

我的表包含 97 列,数据类型为 varchar(200) 约 80% 和 bigint,char。

从 mytable 中选择 count(*) 它返回 4500 行

我正在使用 SQL 语句测试 100 行

select * from mytable 使用时间约 2.3 分钟

我认为,如果返回所有记录太慢了

请推荐我加快查询和结果的方法。

我的数据库服务器是 db2 9.5

4

2 回答 2

1

为了提高性能,您应该做的第一件事是停止使用SELECT *. 重写查询以获取您需要的列。

第二件事是添加一个 WHERE 子句。你真的需要返回表格的所有行吗?

第三件事是索引,你的表有没有,你可以在你的 WHERE 语句中使用索引列等等。

不使用select *的原因是什么?

http://weblogs.asp.net/jgalloway/archive/2007/07/18/the-real-reason-select-queries-are-bad-index-coverage.aspx

于 2013-08-15T15:12:17.403 回答
0

您需要隔离慢速查询或显示查询。我假设它是两者的结合。

当您有 97 列,每列都是 varchar(200) 时,sql 无法将所有信息存储在page的同一行中。最坏的情况是 97 * 202(我使用 202 而不是 200,因为 sql 需要在每列中存储 varchar 的长度,我相信它将它存储为两个字节) 19594 比页面上的行大得多可以处理。TL;博士; 规范化您的表并将列分解为另一个表上的逻辑单元。

同样执行 SELECT * FROM X 将导致全表扫描,这比在索引列上查询要慢得多。

如果您必须执行 SELECT * FROM X 并且您必须有 97 列,请将列数据类型更改为较小的数据类型 (int,tinyint,char(10)),这将优化存储并加快查询速度。

于 2013-08-15T16:33:14.293 回答