我在SQL 2014的内存表中进行测试,特定查询的执行计划在tempdb中显示排序。
查询在两个内存表之间(在两个表中都有非聚集索引的字段上)和一个具有一些总和和计数的组之间有一个连接 - 服务器有足够的RAM可用。
如果表是"在内存"?
,为什么查询在tempdb中排序?我还想知道为什么SQL Suggesting创建一个索引,如果"创建索引"内存表中不允许使用该语句。
答案 0 :(得分:1)
此查询正在互操作模式下运行。这使用普通的查询处理器,除了它从Hekaton表中提取数据。否则,我无法想到任何变化。
如果有的话,你从Hekaton获得的加速非常有限。
您不能使用 <cache-container name="web" default-cache="dist" module="org.wildfly.clustering.web.infinispan">
<transport lock-timeout="60000"/>
<local-cache name="passivation" batching="true">
<file-store passivation="true" purge="false"/>
</local-cache>
<distributed-cache name="dist" batching="true" mode="ASYNC" owners="2" l1-lifespan="0">
<locking isolation="READ_COMMITTED" striping="false" acquire-timeout="30000" concurrency-level="20000"/>
<transaction locking="OPTIMISTIC"/>
<file-store/>
</distributed-cache>
</cache-container>
语句,但可以在创建表时创建索引。
答案 1 :(得分:1)
数据可以存储在内存中,但是如果排序运算符所需的内存超过此值,那么查询处理器仍然只能使用它在内存授予中给出的内存来实际执行查询。优化器,它将以与使用基于磁盘的表的查询相同的方式溢出。