SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

アイエニウェア・ソリューションズ ドキュメント翻訳(AD)

SQL Anywhere 11のクールな新機能トップ10

原文: Top 10 Cool New Features In SQL Anywhere 11

3. 即時マテリアライズドビュー

 部署ごとの従業員リストの作成に使われるマテリアライズドビューの例を以下に示します。

CREATE MATERIALIZED VIEW DeptList AS
SELECT Departments.DepartmentID, 
Employees.EmployeeID, 
Departments.DepartmentName, 
Employees.GivenName,
Employees.Surname, 
Employees.Phone
FROM Departments
INNER JOIN Employees
ON Employees.DepartmentID = Departments.DepartmentID;

 マテリアライズドビューは、使用する前に必ず初期化する必要があります。

REFRESH MATERIALIZED VIEW DeptList;

 通常の(手動の)マテリアライズドビューでは、ベーステーブルを変更しても、その後でREFRESHを実行しなければ、古いデータが表示されます。

UPDATE Employees SET DepartmentID = 400 WHERE EmployeeID = 1336;
SELECT * 
FROM DeptList
ORDER BY DepartmentName, 
Surname,
GivenName;
DepartmentID  EmployeeID  DepartmentName  GivenName  Surname  Phone
============  ==========  ==============  =========  =======  ==========
300           1336        Finance         Janet      Bigelow  6175551493 

 SQL Anywhere 11からは、ベーステーブルに対して行ったすべての更新がマテリアライズドビュー内のデータに直ちに適用されるようにビューを変更することができます。これを行うための手順を以下に示します。

TRUNCATE TABLE DeptList;
CREATE UNIQUE INDEX xid ON DeptList ( 
DepartmentID, 
EmployeeID );

ALTER MATERIALIZED VIEW DeptList IMMEDIATE REFRESH;
REFRESH MATERIALIZED VIEW DeptList;

 手動のビューに既にデータが挿入されている場合は、TRUNCATE TABLEが必要です。ビューを即時ビューに変更するには、ビューを空にする必要があります。CREATE UNIQUE INDEXも即時ビューの要件です。SQL Anywhereがローを更新するときに、目的のローを見つけ出せるようにしなければならないからです。上記のALTER文では、ビューのリフレッシュモードをIMMEDIATEに変更しています。また、最初にデータをビューに挿入するためにREFRESHが1回必要です。確かにステップ数は多くなりますが、1回だけ実行すれば済みます。

 ベーステーブルを更新してからビューをクエリすると、明示的なREFRESHを新たに実行しなくても、新しいデータが直ちに表示されます。

UPDATE Employees SET DepartmentID = 400 WHERE EmployeeID = 1336;
SELECT * 
FROM DeptList
ORDER BY DepartmentName, 
Surname,
GivenName;
DepartmentID  EmployeeID  DepartmentName  GivenName  Surname  Phone
============  ==========  ==============  =========  =======  ==========
400           1336        Marketing       Janet      Bigelow  6175551493 

 マテリアライズドビューがクールである本当の理由は、そのビューが存在するかどうかわからなくても利用できることです。次のクエリではベーステーブルを使用していますが、図2は、SQL Anywhereがベーステーブルの代わりにDeptListビューを使用したことを示しています。

SELECT Departments.DepartmentName, 
Employees.GivenName,
Employees.Surname, 
Employees.Phone
FROM Departments
INNER JOIN Employees
ON Employees.DepartmentID = Departments.DepartmentID;
図2 マテリアライズドビューが自動的に使用される
図2 マテリアライズドビューが自動的に使用される

次のページ
4. 下位互換性が復活

この記事は参考になりましたか?

アイエニウェア・ソリューションズ ドキュメント翻訳連載記事一覧

もっと読む

この記事の著者

Breck Carter(Breck Carter)

RisingRoad Professional Servicesの主幹コンサルタント。SQL Anywhereデータベースと、Oracle、SQL Server、SQL AnywhereとMobiLinkとの同期に関するコンサルティングとサポートを得意とする。SQL Anywhereブログの著者でもある。連絡先はbreck.carter@gmail.com。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/5475 2010/11/12 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング