我的SELECT语句非常慢

时间:2013-08-15 15:05:25

标签: sql performance select optimization db2

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

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

我正在使用SQL语句

测试100行

从mytable中选择*。使用时间约为2.3分钟

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

,则太慢了

请推荐我加快查询和结果的速度。

我的数据库服务器是db2 9.5

2 个答案:

答案 0 :(得分:0)

要提高性能,首先应该停止使用SELECT *。重写查询以获取所需的列。

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

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

What is the reason not to use select *?

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

答案 1 :(得分:0)

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

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

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

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