小编Kyl*_*Mit的帖子

使用 OR 运算符的单个查询与使用等于运算符的多个查询

案例 1 - 在 where 子句中使用 OR 运算符的单个查询:

select * from users where name='smith' or nick='smith' (using index_merge )
Run Code Online (Sandbox Code Playgroud)

案例 2 - 在 where 子句中使用 equals 运算符的多个查询:

select * from users where name='smith'; (using single index);

select * from users where nick='smith'; (using single index);
Run Code Online (Sandbox Code Playgroud)

:在案例 2 中是否有任何性能损失?

mysql index where

6
推荐指数
1
解决办法
1814
查看次数

缓存聚合计数的性能注意事项

我们有一个InventoryActivity表,用于保存项目数量的交易变化:

CREATE TABLE dbo.InventoryActivity(
    InventoryActivity_uid int IDENTITY(1,1) NOT NULL PRIMARY KEY,
    Organization_uid int NOT NULL,
    MasterInventory_uid int NOT NULL,
    AdjustmentType_cd varchar(20) NULL,
    AdjustmentReason_cd varchar(20) NULL,
    Quantity int NULL
)
Run Code Online (Sandbox Code Playgroud)

我们想要一个InventorySummary应该聚合到每个的当前数量。汇总计数应该始终可以从交易记录的总和中推导出来,但是我们有几种不同的方法来计算汇总计数:

  1. 存储过程
  2. 单独的汇总表
  3. 索引视图

哪些性能考虑因素应该使天平有利于特定策略?
存在哪些最佳实践? *(我知道最佳实践接近于讨论,但我想知道哪些考虑会有助于做出决定)

这是一些示例代码和数据的小提琴

  1. 存储过程

    最简单的选择是每次都执行新鲜的 SUM 操作。但不涉及缓存,随着时间的推移可能会导致性能问题。

    CREATE PROCEDURE dbo.GetInventorySummary 
    AS   
    SELECT Organization_uid,
           MasterInventory_uid,
           SUM(Quantity) AS Quantity
    FROM dbo.InventoryActivity
    GROUP BY Organization_uid, MasterInventory_uid
    
    Run Code Online (Sandbox Code Playgroud)
  2. 单独的表

    我们可以创建一个表来存储当前数量。好的一面是获取这些数据是微不足道的。缺点是我们每次写入 InventoryActivity 表时都必须手动维护它并保持记录同步。

    CREATE TABLE dbo.InventorySummary(
        Organization_uid int NOT NULL,
        MasterInventory_uid int NOT NULL,
        Quantity int NOT NULL, …
    Run Code Online (Sandbox Code Playgroud)

sql-server aggregate cache sql-server-2012

5
推荐指数
1
解决办法
1225
查看次数

标签 统计

aggregate ×1

cache ×1

index ×1

mysql ×1

sql-server ×1

sql-server-2012 ×1

where ×1