PDA

View Full Version : حرفه ای: تفاوت در سرعت لود AdoStoredProc و AdoQuery



tiphooo
جمعه 14 بهمن 1390, 23:11 عصر
با سلام
آیا اگر یک دستور (فرضا یک دستور ساده SELECT * FROM T1) به صورت پروسیجر در SQL نوشته شود و با استفاده از AdoStoredProc در دلفی فراخوانی شود سرعت لود Data بهتر است یا در حالتی که با استفاده از AdoQuery کد را درون برنامه دلفی تولید کنیم مثلا
With AdoQuery1 Do
begin
;Close
;SQL.Clear
;SQL.Text:='SELECT * FROM T1'
;open
;end
اگر زمان لود Data متفاوت است لطفا دلیل آن را هم ذکر کنید
با تشکر

BORHAN TEC
جمعه 14 بهمن 1390, 23:36 عصر
اگر یک دستور (فرضا یک دستور ساده SELECT * FROM T1) به صورت پروسیجر در SQL نوشته شود و با استفاده از AdoStoredProc در دلفی فراخوانی شود سرعت لود Data بهتر استاین مورد کاملاً درست است و از سرعت بالاتری برخوردار است و علتش هم اینه که در این حالت حجم داده ای که بین سرور و برنامه کلاینت رد و بدل می شود طبیعتاً کمتر خواهد بود و دلیل دیگر هم اینه که کدهایی که به وسیله AdoQuery به سمت سرور فرستاده می شوند باید قبل از اجرا کامپایل شوند ولی در SP ها چنین نیست چون SP ها از قبل کامپایل شده اند. توجه داشته باشید که این موضوع به خوبی خود را در برنامه های تحت شبکه نشان می دهد و یکی از مهمترین عواملی است که می تواند کارایی برنامه های با تعداد کاربران زیاد را به طور شگفت آوری بالا ببرد!:چشمک:

tiphooo
شنبه 15 بهمن 1390, 01:14 صبح
مورد دوم شما مورد قبول است که می گویید این دستورات در سمت سرور مجددا کامپایل می شوند اما در مورد جواب اول شما وقتی که نتیجه خروجی هر دو مورد یکی است چرا باید حجم داده ای که بین سرور و برنامه کلاینت رد و بدل می شود در حالت اول کمتر باشد؟
با تشکر

BORHAN TEC
شنبه 15 بهمن 1390, 01:34 صبح
برای درک این موضوع پیشنهاد می کنم که عبارت "مزایای استفاده از SP در SQL (http://www.google.com/#sclient=psy-ab&hl=en&biw=1360&bih=559&source=hp&q=%D9%85%D8%B2%D8%A7%DB%8C%D8%A7%DB%8C+%D8%A7%D8%B 3%D8%AA%D9%81%D8%A7%D8%AF%D9%87+%D8%A7%D8%B2+SP+%D 9%87%D8%A7+%D8%AF%D8%B1+SQL&pbx=1&oq=%D9%85%D8%B2%D8%A7%DB%8C%D8%A7%DB%8C+%D8%A7%D8% B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87+%D8%A7%D8%B2+SP+% D9%87%D8%A7+%D8%AF%D8%B1+SQL&aq=f&aqi=&aql=&gs_sm=e&gs_upl=1916l14559l0l14965l30l21l0l9l9l1l588l7090l2-14.3.1.3l30l0&bav=on.2,or.r_gc.r_pw.,cf.osb&fp=c003a0da6332bf16)" را جستجو کنید.

ولی برای این که تا حدودی جواب داده باشم یک مثال می زنم:
دستور SQL زیر را در نظر بگیرید.
Select Count(*) From MyTbl
-اگر این دستور به شکل SP باشد تمام عملیات در درون سرور انجام شده و نتیجه که فقط یک عدد است به کلاینت برگردانده می شود.
-اگر این دستور به شکل یک کوئری در داخل کلاینت باشد ابتدا کلیه رکوردها به کلاینت منتقل شده و سپس عملیات روی آن انجام می شود تا تعداد رکوردها بدست آید.

البته این موارد ممکن است در DBMS ها و تکنولوژی کار با پایگاه های داده مختلف تا حدودی متفاوت باشد.