我有一个庞大的数据库,我的任务是提高其性能,以避免超时问题并最小化选择查询持续时间。 我需要集中哪些方面来有效地提高存储过程的性能? 像facebook这样的网站如何存储大量数据并且仍然不缺乏性能? 可以采取哪些措施来改善SP的性能?
答案 0 :(得分:0)
百分之百的慢查询可以通过添加/重建索引来修复。确保所有相关表格都有索引,并确保join clause criteria match those index keys。
请注意,添加索引可能会有自己的性能开销,尤其是在插入记录时。但它通常是值得的。
答案 1 :(得分:0)
如果要在SQL Server中改进存储过程性能,建议使用以下3项内容:
添加'设置NOCOUNT ON'在SP中 - 它可以提供显着的性能提升,因为网络流量大大减少。
尝试在主要索引的where条件中使用列。
验证执行计划,如果发现多个并行发生,请尝试使用OPTION(MAXDOP N),其中N可根据要求设置。
答案 2 :(得分:0)
问题是
影响多个联接的因素
有许多事情会产生负面影响,但通常的嫌疑人都在下面。
OUTER JOIN
A.intColumn+1 = B.intColumn
ORDER BY
之类的条款也会影响整体效果。
答案 3 :(得分:0)
(以MySQL为中心的答案)
JOINs
是通过一次处理一个表来执行的。优化器选择它认为最好开始的那个。以下是一些标准:
WHERE ...
。当选择下一个'时会出现类似的情况。要使用的表。
MySQL几乎从不在SELECT
中为每个表使用多个索引(假设没有子查询或UNIONs
)。复合INDEX
通常很有用。有时候"覆盖"索引是有保证的。
查看我的index cookbook。
存储例程对性能没有多大帮助 - 除非您通过WAN访问服务器。在这种情况下,SP会减少往返次数,从而改善延迟。
每天30K插页?这是微不足道的。性能问题在哪里?大SELECTs
?这是一个数据仓库应用程序吗?你有摘要表吗? 他们是性能提升的重要因素。
数百万行?还是数十亿?
归一化?过归? (不要标准化'连续的值,如FLOAT,DATE等。)
那是很多挥手的事。如果你想要一些真实的建议,那就让我们看一个慢的查询。
答案 4 :(得分:-2)
根据我的经验,这一切都归结为索引。通过使用示例可以最好地说明这一点。假设你有两个表T1和T2,你想加入它们。每个表只有1000行。如果没有索引,查询执行计划将采用两个表的叉积,然后迭代逐步筛选出与where条件不匹配的结果。为简单起见,我们假设只有一行符合过滤条件。
T1 X T2 = 1000 * 1000 = 1,000,000 如果没有索引,过滤将需要100万步。
但是,使用索引编制时,只需要20个步骤。 LOG2(n)的