我是索引新手,我有大问题。
我的查询SELECT * FROM TABLE
持续时间过长。
是否可以使用索引对其进行优化以获得更快的结果?
我知道索引对WHERE
子句和类似内容很有用,但这是SELECT *
?
我有超过 20 万条记录,当然它们都有唯一的 ID。
只需创建一个带有 ID 列的索引就足够了,或者最好的策略是什么?
我是索引新手,我有大问题。
我的查询SELECT * FROM TABLE
持续时间过长。
是否可以使用索引对其进行优化以获得更快的结果?
我知道索引对WHERE
子句和类似内容很有用,但这是SELECT *
?
我有超过 20 万条记录,当然它们都有唯一的 ID。
只需创建一个带有 ID 列的索引就足够了,或者最好的策略是什么?
对于要过滤的所有列,添加仅包含此列的索引。
在 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 行(假设搜索条件已编入索引)。
获取 200k 行是荒谬的,因为没有人会查看所有行。您可能想要计算行数(确实可以使用 COUNT 等快速完成),并仅显示前 N 行,见上文。关键是看匹配了多少行,而不是看行本身。我打赌!或者你们是100%的疯子。
不要在 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 行或其他内容
您所指的唯一 ID 很可能是索引键。选择这么多数据并在应用程序中处理这些数据不会很快,尤其是在构建网页时。您可能想尝试: