共用方式為


使用彈性資料庫工具進行多分區查詢

適用於:Azure SQL 資料庫

概觀

使用彈性資料庫工具,您可以建立分區化資料庫解決方案。 多分區查詢 可用於需要執行跨數個分區之查詢的工作,例如數據收集/報告。 (這與 數據相依路由 形成對比,這會在單一分區上執行所有工作。)

  1. 使用 RangeShardMap (Java, .NET) 或 ListShardMap (Java, .NET) 使用 TryGetRangeShardMap (Java, .NET), TryGetListShardMap (Java, .NET), 或 GetShardMap (Java, .NET) 的方法來取得。 請參閱 建構 ShardMapManager取得 RangeShardMap 或 ListShardMap
  2. 建立 MultiShard 連線 ionJava.NET) 物件。
  3. 建立 MultiShardStatement 或 MultiShardCommandJava.NET)。
  4. CommandText 屬性Java.NET) 設定為 T-SQL 命令。
  5. 呼叫 ExecuteQueryAsync 或 ExecuteReaderJava.NET) 方法來執行命令。
  6. 使用 MultiShardResultSet 或 MultiShardDataReaderJava.NET) 類別來檢視結果。

範例

下列程式代碼說明使用名為 myShardMap 的指定 ShardMap 使用多重分區查詢的使用方式。

using (MultiShardConnection conn = new MultiShardConnection(myShardMap.GetShards(), myShardConnectionString))
{
    using (MultiShardCommand cmd = conn.CreateCommand())
    {
        cmd.CommandText = "SELECT c1, c2, c3 FROM ShardedTable";
        cmd.CommandType = CommandType.Text;
        cmd.ExecutionOptions = MultiShardExecutionOptions.IncludeShardNameColumn;
        cmd.ExecutionPolicy = MultiShardExecutionPolicy.PartialResults;

        using (MultiShardDataReader sdr = cmd.ExecuteReader())
        {
            while (sdr.Read())
            {
                var c1Field = sdr.GetString(0);
                var c2Field = sdr.GetFieldValue<int>(1);
                var c3Field = sdr.GetFieldValue<Int64>(2);
            }
        }
    }
}

主要差異在於多分區連線的建構。 當 Sql 連線 ion 在個別資料庫上運作時,MultiShard 連線 ion 會採用分區集合作為其輸入。 從分區對應填入分區集合。 然後使用 UNION ALL 語意在分區 集合上執行查詢,以組合單一整體結果。 您也可以選擇使用 命令上的 ExecutionOptions 屬性,將資料列的來源分區名稱新增至輸出。

請注意 myShardMap.GetShards()的呼叫。 這個方法會從分區對應擷取所有分區,並提供簡單的方法,跨所有相關資料庫執行查詢。 透過呼叫 myShardMap.GetShards() 所傳回的集合執行 LINQ 查詢,即可進一步精簡多分區查詢的分區集合。 結合部分結果原則,多分區查詢中的目前功能已設計為適用於數十到數百個分區。

多重分區查詢的限制目前缺少查詢之分區和 Shardlet 的驗證。 雖然數據相依路由會確認指定的分區在查詢時屬於分區對應,但多分區查詢不會執行這項檢查。 這可能會導致在已從分區對應中移除的資料庫上執行的多分區查詢。

多分區查詢和分割合併作業

多分區查詢不會驗證查詢資料庫上的shardlet是否參與進行中的分割合併作業。 (請參閱 使用彈性資料庫分割合併工具進行調整。這可能會導致相同 shardlet 中的數據列在相同多分區查詢中針對多個資料庫顯示的情況不一致。 請注意這些限制,並考慮在執行多分區查詢時清空進行中的分割合併作業和分區對應變更。

尚未使用彈性資料庫工具? 請參閱使用者入門指南。 如有疑問,請在 SQL Database 的 Microsoft Q&A 問題頁面上與我們連絡。如有功能要求,請在 SQL Database 意見反應論壇中新增想法或投票支持現有的想法。