sql – 如何针对特定查询优化表?

前端之家收集整理的这篇文章主要介绍了sql – 如何针对特定查询优化表?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
>您使用哪些模式来确定频繁查询
>您如何选择优化因子?
>可以做出哪些类型的更改?

解决方法

这是一个很好的问题,如果相当宽泛(并且没有更糟糕的那样).
如果我了解你,那么你就是在问从头开始如何解决优化问题.

要问的第一个问题是:“是否存在性能问题?”
如果没有问题,那么你已经完成了.通常就是这种情况.尼斯.

另一方面…

确定频繁查询

记录将为您提供频繁的查询.
如果您正在使用某种数据访问层,那么添加代码来记录所有查询可能很简单.
记录执行查询的时间以及每个查询需要多长时间也是一个好主意.这可以让您了解问题所在.
另外,询问用户哪些位烦恼他们.如果缓慢的响应不会惹恼用户,那么无关紧要.

选择优化因子?

(我可能会误解这部分问题)
您正在寻找查询/响应时间中的任何模式.
这些通常是对大型表或查询查询,这些查询在单个查询中连接多个表. …但是如果您记录响应时间,则可以由这些人指导.

可以做出哪些改变?

您特别询问优化表格.
以下是您可以寻找的一些内容

>非正规化.这将几个表组合成一个更宽的表,因此您可以只读取一个表来代替将多个表连接在一起的查询.这是一种非常常见且功能强大的技术. NB.我建议保留原始的规范化表格并另外构建非规范化表格 – 这样,你就不会扔掉任何东西.如何让它保持最新是另一个问题.您可以在基础表上使用触发器,或定期运行刷新过程.
>标准化.这通常不被认为是优化过程,但它有两种情况:

>更新.规范化使更新速度更快,因为每次更新都是最小的(您正在更新最小的 – 在列和行方面 – 可能的表.这几乎是规范化的定义.
>查询非规范化表以获取存在于更小(更少行)表上的信息可能导致问题.在这种情况下,存储规范化表以及非规范化表(见上文).

>水平分区.这意味着通过在另一个相同的表中放置一些行来使表更小.一个常见的用例是在表ThisMonthSales中包含本月的所有行,以及表OldSales中的所有旧行,其中两个表具有相同的模式.如果大多数查询都是针对最近的数据,则此策略可能意味着99%的查询仅查看1%的数据 – 这是一次巨大的性能提升.
>垂直分区.这是从表中删除字段并将它们放入一个新表中,该表通过主键连接回主表.这对于非常宽的表(例如,具有数十个字段)非常有用,并且如果表稀疏地填充,则可能有用.
> Indeces.我不确定你的问题是否涵盖了这些,但是关于使用indeces还有很多其他答案.查找索引案例的好方法是:查找慢查询.查看查询计划并查找表扫描.该表上的索引字段,以便删除表扫描.如果需要,我可以写更多内容 – 发表评论.

你可能也喜欢my post on this.

猜你在找的MsSQL相关文章