Public Preview of Compatibility Level 140 for Azure SQL Database でアナウンスされていますが、SQL Database で互換性レベル 140 がパブリックプレビューとなっています。
少し前から設定できていた気がしなくもないのですが、正式にパブリックプレビューになったのは今回のタイミングなんですね。
互換性レベル 140 は SSMS か以下のクエリで設定できます。
ALTER DATABASE CURRENT SET COMPATIBILITY_LEVEL =140
互換性レベル 140 での改善については Differences Between Compatibility Level 130 and Level 140 を見るとよいかと。
Adaptive Query Processing (適応されたクエリの処理) による、クエリの動的な最適化が大きな内容でしょうか。
バッチモードで適応される形になるので、列ストアインデックスによるクエリの最適化の範囲が増えている感じですかね。
アナウンスには含まれていないのですが、SQL Server 2017 のグラフテーブルについても、SQL Database で使用できるようになっているようです。
こちらは、アナウンスがないので、一時的に使えているだけかもしれませんが。
Graph processing with SQL Server 2017
以下のようなクエリが SQL Database でも実行できるようになっていました。
-- Create person node table DROP TABLE IF EXISTS dbo.Person DROP TABLE IF EXISTS dbo.friend CREATE TABLE dbo.Person (ID integer PRIMARY KEY, name varchar(50)) AS NODE; CREATE TABLE dbo.friend (start_date DATE) AS EDGE; -- Insert into node table INSERT INTO dbo.Person VALUES (1, 'Alice'); INSERT INTO dbo.Person VALUES (2,'John'); INSERT INTO dbo.Person VALUES (3, 'Jacob'); INSERT INTO dbo.Person VALUES (4, 'Joseph'); -- Insert into edge table INSERT INTO dbo.friend VALUES ((SELECT $node_id FROM dbo.Person WHERE name = 'Alice'), (SELECT $node_id FROM dbo.Person WHERE name = 'John'), '9/15/2011'); INSERT INTO dbo.friend VALUES ((SELECT $node_id FROM dbo.Person WHERE name = 'Alice'), (SELECT $node_id FROM dbo.Person WHERE name = 'Jacob'), '10/15/2011'); INSERT INTO dbo.friend VALUES ((SELECT $node_id FROM dbo.Person WHERE name = 'John'), (SELECT $node_id FROM dbo.Person WHERE name = 'Jacob'), '10/15/2012'); INSERT INTO dbo.friend VALUES ((SELECT $node_id FROM dbo.Person WHERE name = 'John'), (SELECT $node_id FROM dbo.Person WHERE name = 'Joseph'), '10/15/2012'); -- use MATCH in SELECT to find friends of Alice SELECT Person2.name,start_date AS FriendName FROM Person Person1, friend, Person Person2 WHERE MATCH(Person1-(friend)->Person2) AND Person1.name = 'Alice'; SELECT Person2.name AS FiriendName, friend.start_date, Person3.name AS Friend_of_FriendName, friend2.start_date FROM Person Person1, friend, Person Person2, friend friend2, Person Person3 WHERE MATCH(Person1-(friend)->Person2-(friend2)->Person3) AND Person1.name = 'Alice';