ورود

View Full Version : CTE بهتره یا Temp Table



javadsaberifar
شنبه 20 مهر 1392, 09:09 صبح
سلام به دوستان عزیز
من یه Table دارم که توسط چند تا Thread رکوردهای آن Select زده می شه و پس از انجام یه پردازش هایی در سطح برنامه اون رکوردها Update می شوند. برای اینکه Thread ها رکوردهای تکراری Select نزنند من یه فیلد مثلا Lock دارم که اگه یه رکورد را برداشتم Lock= True می کنم.
این کار تو یه SP انجام میشه که ابتدا رکوردهایی را که می خوام به Thread بدم را در یک Temp Table میریزم سپس همون رکوردها را Lock= True می کنم و در آخر رکوردهای داخل Temp Table را به عنوان خروجی برمی گردونم.
حالا 2 تا سئوال دارم:
1- آیا برای افزایش سرعت می توان کاری کرد که همان زمانی که عملیات Select انجام میشه عملیات Update هم انجام بشه تا به این صورت Temp Table حذف بشه؟
2- اگر سئوال اول امکان پذیر نیست، برای بهینه تر کردن سرعت کار Common Table Expression بهتره یا همون Temp Table ؟
ممنون از همه کسانی که به من کمک می کنند.

Reza_Yarahmadi
یک شنبه 21 مهر 1392, 08:17 صبح
1- آیا برای افزایش سرعت می توان کاری کرد که همان زمانی که عملیات Select انجام میشه عملیات Update هم انجام بشه تا به این صورت Temp Table حذف بشه؟

سوالتون خیلی واضح نیست. در صورتی که میخواید روی خروجی یک Select ویرایش انجام بدید میتونید بصورت زیر امتحان کنید.
UPDATE YourTable Set YourField = @Param1
FROM
YourTable INNER JOIN Table_2
ON
...

حمیدرضاصادقیان
یک شنبه 21 مهر 1392, 08:52 صبح
سلام.
درمورد سوال یک ٬ بله میتونید ترکیب کنید ولی باید صورت مسئله روشن بشه تا بتونیم یک راه حل مناسب ارائه بدیم.
در مورد سوال دوم ٬‌ CTE از Temp Table بهتره چون توی Ram تشکیل میشه ولی Temp Table از فضای Tempdb استفاده میکنه . البته اگر CTE نیاز به Work table داشته باشه باز پای Tempdb وسط باز میشه که اینو میتونیت قبل از اجرای دستورتون ٬ با اجرا کردن دستور Set statistics io on متوجه بشید.

tooraj_azizi_1035
سه شنبه 23 مهر 1392, 11:01 صبح
سلام
SQL Server خودش می تونه دستورات رو موازی اجرا کنه.نمی دونم در سناریوی شما سپردن کار به SQL Server معنی دار هست یا نه.
اگه id یکتا وجود داره می تونید از lock صرفنظر کنید و رنج به هر ترد بدید.