[转]如何写出高效能TSQL -深入浅出SQL Server Relational Engine (含 SQL 2014 in-memory Engine)

时间:2024-04-07 19:06:31

[转]如何写出高效能TSQL -深入浅出SQL Server Relational Engine (含 SQL 2014 in-memory Engine)

http://blogs.technet.com/b/chinatechnet/archive/2015/01/16/tsql-sql-server-relational-engine-sql-2014-in-memory-engine.aspx

TSQL on Azure

如有你有使用Azure SQL Database的话,那么在撰写TSQL时需要留意以下几个重点。

1. 善用数据表值参数

SQL 2014有加强数据表值参数(SQL Azure 也一样),就是数据表值参数可以使用索引来提高查询效能,以前大家可能比较常用temp table来处理元数据,但在Azure上需要当心使用过多的tempdb资源,毕竟tempdb只有一个 (大家共享),所以当使用过多tempdb资源时,Azure可能会自动切断联机,所以建议使用数据表值参数取代temp数据表来处理元数据。

2. 减少数据网络来回次数

由于网络质量我们无法掌握,所以一定要减少数据在Azure和Client之间的往来次数,同时也要建立一套安全retry机制,基本上都建议采取批处理 (如一次捞所需的数据结果集),少用row by row方式 (这也增加 Azure 费用成本) 来查询数据或进行数据异动 (如c ursor),且所有TSQL请使用try.. catch包起来,如遇到问题 (如网络断线..等)才可以有相对应处理方法。

3. 善用快取

可以在数据表中新增 rowversion 字段,这样我们就可以轻易使用该字段(注意该字段不建议成为索引键值)来判断上次读取数据列后,数据列中任何值是否有改变,如果没有改变的话就读取本地快取数据,否则就读取Azure上数据,这不仅可以大幅提高效能,同时也可以省下不少 Azure 费用成本。