解答例 - 実習課題1 - 15. インデックス
実習課題1
販売管理データベースから、支払った金額の大きいもの順に、顧客名と支払った合計金額を表示させたいとき、あらかじめどのテーブルのどの列にインデックスを定義しておけばよいか? PostgreSQLで、そのインデックスを定義する SQL 文を記述しなさい。一回あたりの支払い金額は、次の式で求めるものとする。複数台自動車を購入した顧客はそれらすべてを合計したものを支払い金額とする。
- (製品の価格) x (100 - (製品の値引率)) / 100 + (オプションの価格)
- = product.price x (100 - accept_order.dc_rate) / 100 + accept_order.option_price
解答例
accept_order テーブルの c_num 及び p_num
合計金額を表示する SQL 文は以下の通りである。
select c.c_name, sum(p.price * (100 - a.dc_rate) / 100 + a.option_price) as all_price FROM customer c, product p, accept_order a WHERE c.c_num = a.c_num AND p.p_num = a.p_num GROUP BY c.c_name ORDER BY 2 DESC;テーブル「customer」の c_num 及びテーブル「product」の p_num はそれぞれ 主キーであるので、インデックスは自動的に作成されている。従って、テーブ ル「accept_order」の c_num 及び p_num にインデックスを定義すれば、パフ ォーマンスを向上させることができる。
CREATE INDEX product_index ON accept_order(p_num); CREATE INDEX customer_index ON accept_order(c_num);