-1
私はこのような別のビューを使用するビューを使用する基本クエリを持っています。Mysqlビュー対クエリパフォーマンス
SELECT a,b,c,DEBIT_AMOUNT, CREDIT_AMOUNT FROM MAIN_VIEW WHERE a='foo' AND c='bar';
はここで、BASE_TABLEがMAIN_VIEWですでに提供されているので、私はこの ようMAIN_VIEWを変更した
create table BASE_TABLE (
id int not null auto_increment,
a varchar(20),
b varchar(20),
c varchar(20),
primary key (id));
create table OTHER_TABLE (
oid int not null auto_increment,
id int not null,
mtype varchar(10),
amount varchar(20),
primary key (oid));
create or replace view `MAIN_VIEW` AS
SELECT BT.a, BT.b, BT.c,SUB_VIEW.DEBIT_AMOUNT, SUB_VIEW.CREDIT_AMOUNT
FROM BASE_TABLE BT
LEFT JOIN SUB_VIEW ON SUB_VIEW.id = BT.id
create or replace view `SUB_VIEW` AS
SELECT BT.id,
(SELECT SUM(O.amount)
FROM OTHER_TABLE O
WHERE O.mtype = 'DR'
AND O.id = BT.id
) AS DEBIT_AMOUNT,
(SELECT SUM(O.amount)
FROM OTHER_TABLE O
WHERE O.mtype = 'CR'
AND O.id = BT.id
) AS CREDIT_AMOUNT
FROM BASE_TABLE BT
私のクエリはpermformanceは、クエリの実行を高速化するために、非常に遅いですスキーマのIむしろSUB_VIEW
に行くよりも、その後、そこからフェッチDEBIT_AMOUNTとCREDIT_AMOUNT思った - MAIN_VIEW ---
create or replace view `MAIN_VIEW` AS
SELECT BT.a, BT.b, BT.c,
(SELECT SUM(O.amount)
FROM OTHER_TABLE O
WHERE O.mtype = 'DR'
AND O.id = BT.id
) AS DEBIT_AMOUNT,
(SELECT SUM(O.amount)
FROM OTHER_TABLE O
WHERE O.mtype = 'CR'
AND O.id = BT.id
) AS CREDIT_AMOUNT
FROM BASE_TABLE BT
ただし、この変更後、クエリのパフォーマンスはさらに悪化します..いずれかの助けができますか?サブビューはパフォーマンスに悪いと思った...
この2つの簡単な手順を実行することをお勧めします。1.まだ実行していない場合は、適切なCREATEおよびINSERTステートメント(および/またはsqlfiddle)を提供して、問題をより簡単に複製できるようにします。 2.まだ実行していない場合は、手順1で提供された情報に対応する目的の結果セットを提供します。 – Strawberry
さらに、クエリのパフォーマンスに関する質問では、少なくとも関連するすべてのテーブルのCREATE TABLEステートメントとEXPLAIN。 – Strawberry
さて、私はスキーマで質問を修正しました。 – sam