技術ブログ
目次
Oracle ACE Proの渡部です。 主要なRDBMS製品を比較します。
立場の表明
リレーショナルデータベースで索引(インデックス)というと、たいていBツリー索引(Bツリーインデックス)のことですが、Bツリー以外の索引も存在します。
各RDBMS製品の、Bツリー以外の索引の対応状況をまとめました。
Bツリー索引については、以下の記事を参照してください。
主要RDBMS製品の比較 – インデックスの仕組みと物理構造
ビットマップ索引は主にデータウェアハウス環境で使われます。
Oracleにおけるビットマップ索引は以下の特徴を持ちます。
Oracleのビットマップ索引の構造を示します。
以下にビットマップ索引を用いるSQLと実行計画を示します。
SELECT * FROM SALES
WHERE cust_id = 3608
AND prod_id = 119
AND time_id = TO_DATE('01/12/31 00:00:00', 'YY/MM/DD HH24:MI:SS');
---------------------------------------------------------------
| Id | Operation | Name |
---------------------------------------------------------------
| 0 | SELECT STATEMENT | |
| 1 | TABLE ACCESS BY INDEX ROWID BATCHED| SALES |
| 2 | BITMAP CONVERSION TO ROWIDS | |
| 3 | BITMAP AND | |
|* 4 | BITMAP INDEX SINGLE VALUE | SALES_CUST_BIX |
|* 5 | BITMAP INDEX SINGLE VALUE | SALES_PROD_BIX |
|* 6 | BITMAP INDEX SINGLE VALUE | SALES_TIME_BIX |
---------------------------------------------------------------
4 - access("CUST_ID"=3608)
5 - access("PROD_ID"=119)
6 - access("TIME_ID"=TO_DATE('01/12/31 00:00:00','YY/MM/DD HH24:MI:SS'))
SELECT * FROM SALES
WHERE cust_id = 3608
OR prod_id = 119
OR time_id = TO_DATE('01/12/31 00:00:00', 'YY/MM/DD HH24:MI:SS');
---------------------------------------------------------------
| Id | Operation | Name |
---------------------------------------------------------------
| 0 | SELECT STATEMENT | |
| 1 | TABLE ACCESS BY INDEX ROWID BATCHED| SALES |
| 2 | BITMAP CONVERSION TO ROWIDS | |
| 3 | BITMAP OR | |
|* 4 | BITMAP INDEX SINGLE VALUE | SALES_PROD_BIX |
|* 5 | BITMAP INDEX SINGLE VALUE | SALES_CUST_BIX |
|* 6 | BITMAP INDEX SINGLE VALUE | SALES_TIME_BIX |
---------------------------------------------------------------
4 - access("PROD_ID"=119)
5 - access("CUST_ID"=3608)
6 - access("TIME_ID"=TO_DATE('01/12/31 00:00:00','YY/MM/DD HH24:MI:SS'))
SELECT count(*) FROM SALES
WHERE cust_id = 3608
AND prod_id = 119
AND time_id = TO_DATE('01/12/31 00:00:00', 'YY/MM/DD HH24:MI:SS');
--------------------------------------------------------
| Id | Operation | Name |
--------------------------------------------------------
| 0 | SELECT STATEMENT | |
| 1 | SORT AGGREGATE | |
| 2 | BITMAP CONVERSION COUNT | |
| 3 | BITMAP AND | |
|* 4 | BITMAP INDEX SINGLE VALUE| SALES_CUST_BIX |
|* 5 | BITMAP INDEX SINGLE VALUE| SALES_TIME_BIX |
|* 6 | BITMAP INDEX SINGLE VALUE| SALES_PROD_BIX |
--------------------------------------------------------
4 - access("CUST_ID"=3608)
5 - access("TIME_ID"=TO_DATE('01/12/31 00:00:00','YY/MM/DD HH24:MI:SS'))
6 - access("PROD_ID"=119)
SELECT cust_last_name, cust_first_name
FROM customers
WHERE cust_year_of_birth < 1918;
------------------------------------------------------------------
| Id | Operation | Name |
------------------------------------------------------------------
| 0 | SELECT STATEMENT | |
| 1 | TABLE ACCESS BY INDEX ROWID BATCHED| CUSTOMERS |
| 2 | BITMAP CONVERSION TO ROWIDS | |
|* 3 | BITMAP INDEX RANGE SCAN | CUSTOMERS_YOB_BIX |
------------------------------------------------------------------
3 - access("CUST_YEAR_OF_BIRTH"<1918)
filter("CUST_YEAR_OF_BIRTH"<1918)
SELECT count(*) FROM CUSTOMERS
WHERE CUST_MARITAL_STATUS IS NULL;
--------------------------------------------------------------
| Id | Operation | Name |
--------------------------------------------------------------
| 0 | SELECT STATEMENT | |
| 1 | SORT AGGREGATE | |
| 2 | BITMAP CONVERSION COUNT | |
|* 3 | BITMAP INDEX SINGLE VALUE| CUSTOMERS_MARITAL_BIX |
--------------------------------------------------------------
3 - access("CUST_MARITAL_STATUS" IS NULL)
MySQL, PostgreSQLにはビットマップ索引はありません。 しかし、PostgreSQLは、メモリ上でBツリー索引をビットマップに変換して、行の絞り込みを行う機能があります。
EXPLAIN (COSTS OFF)
SELECT * FROM person
WHERE age = 20 ;
QUERY PLAN
-------------------------------------------------------
Bitmap Heap Scan on person
Recheck Cond: (age = 20)
-> Bitmap Index Scan on idx
Index Cond: (age = 20)
Database Performance Analyzer (DPA) は、オンプレミス&クラウドに対応するデータベース性能監視/分析ツールです。
この記事で取り上げたRDBMS製品を含む、非常に多くのデータベース製品/サービスに対応しています。
以下の特徴があり、導入しやすく有用な製品です。
コーソルはDatabase Performance Analyzer (DPA)の一次代理店で、Database Performance Analyzer (DPA)の製品販売を行います。 SIer様、販社様がDatabase Performance Analyzer (DPA)を販売および導入することも可能です。
コーソルはデータベースの技術力を強みとしています。なかでもOracle Database技術力は日本随一です。MySQL、PostgreSQL、MS SQL Serverの資格や実績を持つエンジニアも多数在籍しております。
DPAの導入や監視設定に関する手順をナレッジとして公開しています。評価版をご利用される際の参考にしていただけると幸いです。
7年連続ORACLE MASTER Platinum取得者数No.1! Oracle Certification Award 2020
コーソルでは、データベース運用を製品とサービスでご支援します。
Database Performance Analyzer (DPA)は、オンプレミスとクラウド上の多くのデータベース製品に対応したデータベース性能管理製品です。低価格であるため、非常に導入しやすいです。
Database Performance Analyzer (DPA)で検出された問題SQLをチューニングする際に、Toad for Oracle / Toad for SQL Serverの SQL Optimizer機能を使用できます。
リモートDBAサービスはDB・運用の専門家がお客様のデータベースに対して 必要な時に必要な対応を行うリモート接続型運用保守サービスです。
データベース運用・保守なら常駐しないリモートDBA
時間制コンサルティングサービスは”必要な時に” ”必要な時間だけ”契約できる 時間契約型のコンサルティングサービスです。
データベース コンサルティングなら時間制コンサルティング