Sql server 对于什么类型的查询,在Sql Server中OLTP在内存中更快?

Sql server 对于什么类型的查询,在Sql Server中OLTP在内存中更快?,sql-server,sql-server-2012,sql-server-2014,Sql Server,Sql Server 2012,Sql Server 2014,我一直在研究SQL Server 2014附带的内存OLTP。我正在网上阅读许多博客、白皮书和可用的演示文稿 到目前为止,我只发现了一种情况,即内存中的OLTP比基于磁盘的表快。内存表中的插入操作比基于磁盘的表快近100倍 我没有发现内存中oltp更快的任何其他查询。我在这两个表上都尝试了Select、Update、Join和Where查询,但找不到内存中OLTP更好的场景 如果您能向我提出一些问题或方案,那就太好了 下面是两个select查询,查询中使用的所有表都有140万行 1在内存中,两个

我一直在研究SQL Server 2014附带的内存OLTP。我正在网上阅读许多博客、白皮书和可用的演示文稿

到目前为止,我只发现了一种情况,即内存中的OLTP比基于磁盘的表快。内存表中的插入操作比基于磁盘的表快近100倍

我没有发现内存中oltp更快的任何其他查询。我在这两个表上都尝试了Select、Update、Join和Where查询,但找不到内存中OLTP更好的场景

如果您能向我提出一些问题或方案,那就太好了

下面是两个select查询,查询中使用的所有表都有140万行

1在内存中,两个表都是基于磁盘的

SELECT SD.shoppingcartid
,SD.shoppingcartname
,sr.Createdate
,sr.TotalPrice
,Rank() OVER (
    ORDER BY TOTALPRICE DESC
    ) AS PriceRank
FROM shoppingcart SR
JOIN shoppingcartdetail SD ON (SD.shoppingcartid = SR.shoppingcartId)
WHERE (
        (
            TOTALPRICE > 50000
            AND CREATEDATE >= GETDATE()
            )
        OR (
            TOTALPRICE / 3 < 50000
            AND CREATEDATE <= GETDATE()
            )
        )
ORDER BY TotalPrice DESC
所用时间:8秒返回70万行

2在内存中两个表都在内存表中

SELECT SD.shoppingcartid
    ,SD.shoppingcartname
    ,sr.CreatedDate
    ,sr.TotalPrice
    ,Rank() OVER (
        ORDER BY TOTALPRICE DESC
        ) AS PriceRank
FROM shoppingcart_reg SR
JOIN shoppingcartdetail_regular SD ON (SD.shoppingcartid = SR.shoppingcartId)
WHERE (
        (
            TOTALPRICE > 50000
            AND CREATEdDATE >= GETDATE()
            )
        OR (
            TOTALPRICE / 3 < 50000
            AND CREATEdDATE <= GETDATE()
            )
        )
ORDER BY TotalPrice DESC

所用时间:11秒返回70万行

我想看看这些测量是如何执行的。即使使用简单的按主键选择,您也可以看到差异。基本上,我观察到每个查询在SSMS中执行所花费的时间。我观察了40万行。内存表和基于磁盘的表的Select语句都花费了2秒钟。选择400k行不是OLTP。大部分时间将用于序列化、网络、反序列化和SSMS UI开销。尝试选择count*仅复制一行。响应您的编辑:使用如此复杂的查询,您将针对Hekaton的更多弱点。Hekaton限制了查询计划。没有散列联接或散列聚合。我相信只有循环连接。你会问:为什么希顿跑得不快?然而,你的目标是赫卡顿的弱点。我不知道如何帮助你做这种行为。跟进我的建议。还要研究本机编译的存储过程,而不仅仅是简单的旧的解释TSQL,这就是内存中的东西开始变得非常快的地方。