-5

我是索引新手,我有大问题。

我的查询SELECT * FROM TABLE持续时间过长。

是否可以使用索引对其进行优化以获得更快的结果?

我知道索引对WHERE子句和类似内容很有用,但这是SELECT *

我有超过 20 万条记录,当然它们都有唯一的 ID。

只需创建一个带有 ID 列的索引就足够了,或者最好的策略是什么?

4

3 回答 3

3
  1. 对于要过滤的所有列,添加仅包含此列的索引。

  2. 在 DB2 中,您可以通过添加 FETCH FIRST N ROWS ONLY 来限制返回的行数,请参阅http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/index.jsp?topic=%2Fcom.ibm.db2 .doc.admin%2Ffrstnrw.htm。这将尽可能快,因为在找到所有 200k 行之前返回前 N 行(假设搜索条件已编入索引)。

  3. 获取 200k 行是荒谬的,因为没有人会查看所有行。您可能想要计算行数(确实可以使用 COUNT 等快速完成),并仅显示前 N 行,见上文。关键是看匹配了多少行,而不是看行本身。我打赌!或者你们是100%的疯子。

于 2012-10-09T12:37:34.617 回答
3

不要在 25 列上创建索引。创建多个索引,甚至可能为每一列创建一个。如果用户可以过滤所有列,请确保过滤器是 AND 而不是 OR。如果您在过滤器之间进行 OR,则索引将无法正常工作。

首先尝试这个作为测试:

SELECT * FROM Ticket WHERE Name = 'AAA'
-- Take length of time that takes

CREATE INDEX IX_TICKET_NAME ON Ticket(Name)

SELECT * FROM Ticket WHERE Name = 'AAA'
-- Seel how long it takes now

如果您看到性能大幅提升,那么 yes 索引会有所帮助。然后尝试找出哪些其他列需要索引。

编辑:然后不允许用户将所有过滤器留空。给他们一个警告,说明至少必须应用一些过滤器。或者如果你不能这样做,如果所有过滤器都是空白的,只需将结果限制为 100 行或其他内容

于 2012-10-09T11:55:32.007 回答
1

您所指的唯一 ID 很可能是索引键。选择这么多数据并在应用程序中处理这些数据不会很快,尤其是在构建网页时。您可能想尝试:

  • 选择部分数据并分段处理。
  • 在应用程序中显示结果之前,使用数据库上的 sql 尽可能多地处理数据。
于 2012-10-09T11:43:36.313 回答