【发布时间】:2010-01-14 16:38:03
【问题描述】:
1)如果不使用索引,SQL 查询执行时间与连接数相比是否为 O(n)?如果不是,我们可能期待什么样的关系?索引能否提高实际的大 O 时间复杂度,还是仅将整个查询时间减少某个常数因子?
有点模糊的问题,我敢肯定它变化很大,但我在这里说的是一般意义上的。
2) 如果您有如下查询:
SELECT T1.name, T2.date
FROM T1, T2
WHERE T1.id=T2.id
AND T1.color='red'
AND T2.type='CAR'
我是否正确假设 DB 在评估多表条件之前先对 T1.color 和 T2.type 进行单表过滤?在这种情况下,使查询更复杂可能会使其更快,因为更少的行需要进行连接级测试?
【问题讨论】:
-
我认为您的数据库的设计方式(例如,索引)和查询中的内容有很大的依赖性,所以它不仅仅是一种您可以查看查询并给出确定的答案。查询分析器将是您找出要更改查询和数据库以获得最快结果的最佳选择。
-
所以你告诉我数据库设计没有基本的科学原理?我不买它,数据库上有大量的 CS 理论。
-
@John,数据库设计有很多合理的原则,甚至更多人不知道这些原则。没有任何东西可以保证良好的设计原则已应用于任何特定的数据库。正如 Will 所说,Query Analyzer 确实是最好的选择。看执行计划。查看选定的索引,并注意可能需要索引或可能存在但未使用的索引。运行 SQL Profiler 并收集性能日志,然后分析这些日志。
-
Cylon,是的,这就是我问这个问题的原因,以了解有关该理论的更多信息。分析器应该用于优化数据库,而不是设计它!
标签: sql performance big-o