我知道我的问题听起来很愚蠢,也许没有人会有完美的答案,但由于我处于完全的死胡同状态,这会让我感觉更好在这里发布。
因此...
我有一个500 MB的SQL Server Express数据库。它包含5个表,可能还有30个存储过程。此数据库用于存储文章,用于Developer It网站。通常情况下,网页加载速度很快,比如2 ou 3秒。但是,sqlserver进程在2或3秒内使用100%的处理器。
我试图找到哪个存储过程是问题而我找不到。看起来每个读表dans都包含文章(大约有155,000个,每15分钟就有20个左右)。
我添加了几个索引,但没有运气......
这是因为表是全文索引的吗? 我应该使用主键而不是日期订购吗?按日期排序我从未遇到任何问题.... 我应该使用动态SQL吗? 我应该将主键添加到文章的URL中吗? 我应该为单独的列或一个大索引使用多个索引吗?
我想要更多细节或代码位,只需要它。
基本上,每个小提示都非常受欢迎。
感谢。
答案 0 :(得分:3)
如果您的索引没有被使用,那么它通常表示两个问题之一:
不可搜索的谓词条件,例如WHERE DATEPART(YY, Column) = <something>
。在函数中包装列会削弱或消除优化程序有效使用索引的能力。
输出列表中未覆盖的列,如果您习惯于编写SELECT *
而不是SELECT specific_columns
,则非常有可能。如果索引不包含您的查询,则SQL Server需要逐个执行每行的RID /键查找,这可能会使查询变慢,以至于优化程序只是决定执行表扫描。 / p>
看看其中一个是否适用于您的情况;如果您仍然感到困惑,我建议您使用有关架构,数据和速度慢的查询的更多信息来更新问题。对于SQL数据库,500 MB是非常小的,因此这应该不会很慢。同时发布执行计划中的内容。
答案 1 :(得分:2)
使用SQL事件探查器捕获应用中使用的大量典型查询。然后通过索引调整向导运行探查器结果。这将告诉您可以添加哪些索引进行优化。
然后查看性能最差的查询并手动分析其执行计划。