got*_*tqn 5 performance sql-server
好吧,我真的阅读了很多文章,使用了不同的技术并做了一些随机的事情来做到这一点。
我的问题是有大表(超过一百万行)和一些小表(有几百行) - 我们谈论的是 8 个内部连接。
将执行时间从超过 2 分钟减少到 30 秒对我来说很奇怪,我无法找到为什么会发生这种情况。
当我从表中选择列时,我会转换它们。我所做的是将列转换为尽可能小的类型。
例如:
nvarchar(4000)
到 nvarchar(50 or 25)
bigint
到 int
int
到 tinyint
结果是执行时间缩短了 1 分 30 秒。为什么会发生这种情况?
例如,如果我的变量是字符串,长度为10的nvarchar(4000)
和nvarchar(50)
将它转换为nvarchar(10)
(或东西接近)。那么,为什么当我从 cast 中减少结果类型时,事情会变得更好?
更多的东西 - 我做了很多测试来检查哪个函数更好 - 转换或转换(测试字符串到字符串,字符串到数字,数字到字符串)但无法定义哪个更好用。有时转换为我提供了几秒钟的更好的执行时间,但不足以得出结论。有没有人做过这样的事情并成功了?
提前感谢您的时间。
Cad*_*oux 10
性能更好的原因是较小的数据类型具有更少的工作集 - 请参阅执行计划(http://www.red-gate.com/our-company/about/book-store/assets/sql-server -执行计划.pdf)
我希望您从 nvarchar(4000) 到 nvarchar(50) 中获得最大的好处 - 即减少了 80 倍 - 而 nvarchar(4000) 最多可以使用 8K!的空间。对于钥匙,这不是一个好主意。
此外,没有外键的事实可能意味着您也没有很好的索引策略。如果您确实有索引(即使对于大得可笑的列),您可能会发现它们可以胜过演员表,因为它可能不会假脱机那么多。
通常,如果可能,您不希望对连接中的键进行任何操作,尤其是对于大型数据集。
归档时间: |
|
查看次数: |
4456 次 |
最近记录: |