PDA

View Full Version : optimize کردن این Query



حمیدرضاصادقیان
یک شنبه 18 شهریور 1386, 08:48 صبح
سلام دوستان.من کوئری زیر رو نوشتم.و شرح عملیاتش هم اینه که سه تا جدول رو باهم join میکنه.داخل هر جدول یک فیلد شرح وجود داره که همه اونا رو باید در یک فیلد قرار بده و شرح مربوط به هر سند را درجلوی خودش نمایش بده.
حالا میخواستم ببینم ایا امکان داره راهی بهتر وجود داشته باشه یا بهتر بشه اونو optimize کرد.



select fs.Sanad,fs.rdf,fs.kol_n,fs.moen_n,fs.Tafzil_n,fs. Price,
fs.bd_bs,fs.date1,d.doc from f_sanad as fs left outer join (Select sanad as sd1,disk1 as doc from f_sanad
union
select sd1,disk1 as doc from b_bank1
union
select sd1,disk1 as doc from b_bank2 ) as d on d.sd1=fs.sanad



اینم plan مربوط به این کوئری

حمیدرضاصادقیان
یک شنبه 18 شهریور 1386, 11:01 صبح
در ضمن یک مشکلی که با این کوئری پیدا کردم اینه که من میخوام شرح سندها در یک ردیف قرار بگیره ولی با این کوئری در دو ردیف میاد.
ببینید در دو تاجدول ما دونوع شرح مختلف برای یک سند داریم.حالا کاربر هنگام گزارش گرفتن میتونه انتخاب کنه که آیا هردو شرح رو ببینه یا فقط یک شرح رو.اگر یک شرح باشه که مشکلی نیست. ولی اگر دو شرح باشه ، با این کوئری که من نوشتم مشکل اینجا پیش میاد که به جای این که هردو شرح رو باهم تلفیق کنه و جلوی یک شماره سند نشون بده.برای هر شرح یک ردیف نشون میده.در نتیجه یک حساب دوبار خارج یا وارد میشه .

AminSobati
یک شنبه 18 شهریور 1386, 11:17 صبح
حمید رضا جان،
اگر استفاده از UNION ALL به جای UNION امکان پذیره، این کار رو انجام بدین. همچنین اگر ایندکس روی sanad وجود نداره، بسازین:


CREATE INDEX ix1 ON f_sanad(sanad)

--و اگر یونیک میتونه باشه به این شکل بسازین

CREATE UNIQUE INDEX ix1 ON f_sanad(sanad)