ホームページ > データベース > mysql チュートリアル > ストアド プロシージャを使用して複雑なデータ構造の親テーブルと子テーブルにデータを効率的に挿入し、適切なデータ マッピングと最適なパフォーマンスを確保するにはどうすればよいでしょうか?

ストアド プロシージャを使用して複雑なデータ構造の親テーブルと子テーブルにデータを効率的に挿入し、適切なデータ マッピングと最適なパフォーマンスを確保するにはどうすればよいでしょうか?

DDD
リリース: 2025-01-14 19:12:44
オリジナル
446 人が閲覧しました

親子テーブルのデータを複雑なデータ構造に効率的に挿入するストアド プロシージャ

質問:

複雑なデータベース構造において、ストアド プロシージャを使用して、正しいデータ マッピングを確保し、パフォーマンスを最適化しながら、親子テーブルにデータを効率的に挿入するにはどうすればよいでしょうか?

解決策:

親子テーブルにデータを効率的に挿入するには、次の手順に従います:

  1. 一時 ID 列の作成: ユーザー定義テーブル (UDT) に EmployeeId 列を追加して、各従業員の一時 ID を保存します。

  2. UDT に一時 ID を設定します: 一時 ID を含むデータを UDT に挿入します。

  3. EmployeeID マッピング テーブルの作成: テーブル変数 (@EmployeeidMap) を宣言して、従業員テーブルから挿入された値を UDT の一時的な従業員 ID にマッピングします。

  4. MERGE ステートメントを使用して従業員テーブルに挿入します。 MERGE ステートメントを使用して @MainEmployee テーブルにデータを挿入し、ソース データの従業員 ID と挿入された従業員 ID をマッピングに出力します。テーブル。

  5. ParentEmployeeDepartment テーブルに挿入: UDT をマッピング テーブルと結合し、実際の従業員 ID を取得して、データを @ParentEmployeeDepartment テーブルに挿入します。

  6. は ParentEmployeeDepartmentID にマップされます: @ParentEmployeeDepartment のデータを使用して、ParentEmployeeDepartmentID の実際の値をストアド プロシージャによって送信されたデータにマップします。

  7. サブテーブルに挿入: Parent テーブルの EmployeeIDDepartmentType を使用して、データをどのサブテーブルに挿入するかを決定します。

コード:

<code class="language-sql">-- 创建EmployeeID映射表
DECLARE @EmployeeidMap TABLE (temp_id int, id int);

-- 使用MERGE语句插入员工表
MERGE INTO @MainEmployee USING @tEmployeeData AS sourceData ON 1 = 0
WHEN NOT MATCHED THEN
    INSERT (FirstName, LastName)
    VALUES (sourceData.FirstName, sourceData.LastName)
    OUTPUT sourceData.EmployeeId, inserted.EmployeeID INTO @EmployeeidMap;

-- 插入ParentEmployeeDepartment表
INSERT INTO @ParentEmployeeDepartment (EmployeeID, DepartmentType)
SELECT Id, DepartmentType
FROM @tEmployeeData
INNER JOIN @EmployeeidMap ON EmployeeID = temp_id;

-- 映射到ParentEmployeeDepartmentID
SELECT FirstName,
     LastName,
     SentData.DepartmentType AS [Dept. Type],
     DepartmentBuilding AS Building,
     DepartmentEmployeeLevel AS [Emp. Level],
     DepartmentTypeAMetadata AS [A Meta],
     DepartmentTypeBMetadata AS [B Meta],
     SentData.EmployeeId AS TempId, EmpMap.id AS [Emp. Id], DeptMap.ParentEmployeeDepartmentID AS [Dept. Id]
FROM @tEmployeeData SentData
INNER JOIN @EmployeeidMap EmpMap ON SentData.EmployeeId = temp_id
INNER JOIN @ParentEmployeeDepartment DeptMap ON EmpMap.id = DeptMap.EmployeeID;</code>
ログイン後にコピー

出力:

FirstName LastName Dept. Type Building Emp. Level A Meta B Meta TempId Emp. Id Dept. Id
Dave_FN Dave_LN B OpenC XII NULL Lab 8 1 1
Joe_FN Joe_LN A 101 IV Tech/IT NULL 7 2 2
Mike_FN Mike_LN B OpenH XII NULL Med 6 3 3
Tom_FN Tom_LN A 101 IV Tech/IT NULL 5 4 4

注:

このソリューションはマッピング テーブルを使用して、テーブル間の異なるデータを効率的に照合します。行ごとの操作を回避し、パフォーマンスを最適化するため、大規模なデータ セットに適しています。

How can I efficiently insert data into parent and child tables in a complex data structure using a stored procedure, ensuring proper data mapping and optimal performance?

以上がストアド プロシージャを使用して複雑なデータ構造の親テーブルと子テーブルにデータを効率的に挿入し、適切なデータ マッピングと最適なパフォーマンスを確保するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート