View Full Version : راهنمایی در مورد کد
habib_namvar
یک شنبه 12 مرداد 1393, 11:24 صبح
با سلام
دوستان عزیز من یک جدولی دارم که روزی 4 هزار رکورد بهش اضافه میشه
این جدول یه عنوان خبر داره یه خلاصه و چند تا ستون دیگه
من هر دفه که رکوردی بهش اضافه میکنم مجبورم اون رکورد رو با استفاده از عنوان خبر مقایسه کنم تا عنوانی تکراری ثبت نشه و چون تعداد رکورد ها بالاست خیلی cpu رو درگیر خودش میکنه
لطفا رهنمایی کنید ببینیم چطور میتونم کوری سبک اجرا کنم
Davidd
یک شنبه 12 مرداد 1393, 13:24 عصر
اگه عنوان خبر كليد اصلي نيست روي اين ستون ايندكس تعريف كنيد (براي ايندكس گذاري طول ستون نبايد از 900 بايت بيشتر باشه). اينكار زمان مقايسه به طور قابل توجهي كم مي كنه. اما از اون طرف چون insert كردن نياز به برزو آوري ايندكس داره، زمان Insert زيادتر ميشه. بايد تست كني ببيني ايندكس چقد تاثير داره.
habib_namvar
دوشنبه 13 مرداد 1393, 07:39 صبح
اگه عنوان خبر كليد اصلي نيست روي اين ستون ايندكس تعريف كنيد (براي ايندكس گذاري طول ستون نبايد از 900 بايت بيشتر باشه). اينكار زمان مقايسه به طور قابل توجهي كم مي كنه. اما از اون طرف چون insert كردن نياز به برزو آوري ايندكس داره، زمان Insert زيادتر ميشه. بايد تست كني ببيني ايندكس چقد تاثير داره.
با تشکر از ما دوست عزیز
من چون از thread استفاده میکمنم شاید اتلاف وقت در insert زیاد به چشم نیاد ولی من بیشتر هدف کاهش استفاده از cpu و سخت افزار های دیگست حالا نمیدونم این کاری که شما گفتید تاثیر داره؟
Davidd
دوشنبه 13 مرداد 1393, 07:53 صبح
با تشکر از ما دوست عزیز
من چون از thread استفاده میکمنم شاید اتلاف وقت در insert زیاد به چشم نیاد ولی من بیشتر هدف کاهش استفاده از cpu و سخت افزار های دیگست حالا نمیدونم این کاری که شما گفتید تاثیر داره؟
من دقيقا متوجه منظور شما نشدم. اگه برنامه شما روي client نصبه و سرور روي سيستم ديگه هست ايندكس گذاري تاثير داره چون عمل مقايسه سريع انجام ميشه و در نتيجه عمل Insert هم سريعتر ميشه. بعد از هر عمل Insert بايد ايندكس ها بروز بشن كه اينكار در سمت سرور به صورت خودكار انجام ميشه بنابراين cpu سمت client مشغول نميشه.
امتحانش كاري نداره. ميشه به راحتي ايندكس ساخت و تست كرد( به شرطي كه طول ستون بيشتر از 900 بايت نباشه)
habib_namvar
دوشنبه 13 مرداد 1393, 18:27 عصر
من دقيقا متوجه منظور شما نشدم. اگه برنامه شما روي client نصبه و سرور روي سيستم ديگه هست ايندكس گذاري تاثير داره چون عمل مقايسه سريع انجام ميشه و در نتيجه عمل Insert هم سريعتر ميشه. بعد از هر عمل Insert بايد ايندكس ها بروز بشن كه اينكار در سمت سرور به صورت خودكار انجام ميشه بنابراين cpu سمت client مشغول نميشه.
امتحانش كاري نداره. ميشه به راحتي ايندكس ساخت و تست كرد( به شرطي كه طول ستون بيشتر از 900 بايت نباشه)
پروژه من سایته که چندین باز از هاست هشدار دادن مبنی بر استفاده زیاد از cpu
بزار من کل برناممو برات توضیح بدم
سایت من میره ار اس اس های سایتای دیگه رو میخونه و در دیتا بیس ذخیره میکنه
من واسه این که یک رکورد تکراری ثبت نشه مجبورم اولین ایتم از ار اس اس رو با اخرین رکورد دریافتی از اون سایت که در دیتا بیس ذخیره هست مقایسه کنم که تکراری نباشه
چون تعداد سایتا و رکورد ها زیاده این cpu رو درگیر میکنه
حالا کل راهکار هایی که میشه واسه کم کردن استفاده از cpu باشه رو لازم دارم
esteghamat
سه شنبه 14 مرداد 1393, 16:08 عصر
همونطور كه دوستمون گفت ايندكس گذاري بهترين و دم دست ترين راهكاره.
اما با توجه به صحبت هاي شما ، اگر فقط دنبال ركورد تكراري از يك سايت در يك روز هستي ، يك ايندكس نانكلاستر روي چند فيلد : تاريخ و سايت و موضوع خبر بگذار.
در اينصورت سرعت جستجوي شما بالا مي ره .
habib_namvar
سه شنبه 14 مرداد 1393, 20:18 عصر
با تشکر از شما
حالا یه سوال این که ایا روش که در زیر میگم بهینه است
میخوام اخرین رکورد هایی که از هر سایت دریافت میشه رو توی یک جدول دیگه یا به صورت فایل در یک تکست ذخیره بشه و با اون مقایسه انجام بشه
esteghamat
پنج شنبه 16 مرداد 1393, 07:41 صبح
قطعا شما در كنار روشهاي استاندارد بهينه سازي سرعت در sql server مي توانيد از ديدگاه Bussiness برنامه خود ، هر تكنيكي كه مورد نياز باشد را پياده كنيد و اينجا خودتان هم مي توانيد بهترين نظر را داشته باشيد.
مثلا (اگر تكراري ها فقط براي يك روز باشد) مي توانيد تمام ورودي هاي هر روز را در يك جدول غير جدول اصلي ذخيره كنيد و مقايسه را با آن انجام دهيد. سپس در يك ساعت مشخص مثلا 12 شب نتايج uniq را به جدول اصلي ببريد.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.