我是索引的新手,我有很大的问题。
我的查询SELECT * FROM TABLE
持续时间过长。
是否可以使用索引对结果进行优化以获得更快的结果?
我知道索引对WHERE
子句很有用但类似但是SELECT *
?
我有超过20万条记录,当然它们都有唯一的ID。
只需创建一个带有ID列的索引或什么是最佳策略?
答案 0 :(得分: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
如果你看到了很大的性能提升,那么是的索引会有所帮助。然后尝试找出哪些其他列需要索引。
编辑:不允许用户将所有过滤器留空。给他们一个警告,说明必须至少应用一些过滤器。或者如果你不能这样做,如果所有过滤器都是空白的,只需将结果限制为100行或其他
答案 1 :(得分:3)
对于您要过滤的所有列,添加仅包含此列的索引。
在DB2中,您可以通过添加FETCH FIRST N ROWS来限制返回的行数,请参阅http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/index.jsp?topic=%2Fcom.ibm.db2.doc.admin%2Ffrstnrw.htm。这将尽可能快,因为在找到所有200k行之前返回前N行(前提是搜索条件已编入索引)。
获取200k行是荒谬的,因为没有人会查看所有行。您可能想要计算行数(确实可以使用COUNT等快速完成),并显示前N行,见上文。关键是要查看匹配的行数,而不是查看行本身。我打赌!或者你们100%疯狂。
答案 2 :(得分:1)
您所指的唯一ID很可能是索引键。选择这么多数据并在应用程序中处理它并不会很快,特别是如果你正在构建一个网页。您可以尝试: