PDA

View Full Version : نحوه صحیح ایندکس گذاری برای فیلدهای از نوع Nvarchar



علیرضا حسن زاده
پنج شنبه 23 تیر 1390, 18:39 عصر
سلام من یه جدول دارم که رو چهار تا از فیلدهای اون از نوع Nvarchar(50) هستن و جستجو رو با Like روی اونها انجام میدم تعداد رکوردها هم حدود 200000 تا هست که روزی 50 تا 100 رکورد به اون اضافه میشه
حالا می خوام بدونم بهترین روش ایندکس گذاری یا سرعت بخشی به جستجو در این جدول چیه الان با Like حدود 3تا 5 کاربر منتظر میشه تا نتیجه کار رو ببینه متوجه بشه که اطلاعات مشابه اطلاعات وارد شده موجو هست یا نه؟ به نزرتون چه نوع ایندکسی می تونم استفاده کنم که سرعت رو بالا تر ببرم (البته شاید روش های دیگه هم به جز ایندکس باشه که من بلدم نیستم اگه ممکنه بفرمایید)
ضمنا از SQL Server2008 R2 استفاده می کنم و تو برنامه هم که به زبان #C هست داده ها رو Sp ارسال می کنم و نتیجه می گیرم و به کاربر نشون می دم اون طوری هم که برنامه رو Trace کردم بیشترین زمان تاخیر مربوط به بازگشت جواب از SQL هست

AminSobati
پنج شنبه 23 تیر 1390, 23:46 عصر
سلام دوست عزیزم،
چند نمونه از WHERE که استفاده میکنین رو پست بفرمایید

علیرضا حسن زاده
شنبه 25 تیر 1390, 10:50 صبح
SELECT *
FROM [dbo].[Persons]
WHERE
([IdNo] like '%'+isnull(@IdNo,[IdNo])+'%' or [IdNo] is NULL) AND
([FName] like '%'+isnull(@FName,[FName])+'%' or [FName] is NULL) AND
([LName] like '%'+isnull(@LName,[LName])+'%' or [LName] is NULL) AND
([Father] like '%'+isnull(@Father,[Father])+'%' or [Father] is NULL)
از این روش استفاده می کنم ولی در حالت کلی با Like خالی هم سرعتش زیاد تفاوتی نداره ولی مسئله ای که مد نظرم هست اینه که سرعت خیلی زیاد باشه چون این کوئری زمانی اجرا میشه که کاربر هر چهار مشخصه رو وارد کرده و می خواد از آخرین فیلد یعنی Idno خارج بشه(تو محیط برنامه #C) آن وقت برنامه کوئری رو اجرا میکنه تا موارد مشابه رو پیدا کنی و کاربر برای رفتن به فیلد بعدی چند ثانیه منتظر میشه که اغلب خوب نیست و این انتظار رو به پایه عدم کارایی برنامه میزاره

AminSobati
دوشنبه 27 تیر 1390, 00:39 صبح
استفاده از OR در اینجا باعث Scan شدن کل جدول خواهد شد. برای جستجوی داینامیک این مقاله رو ببینید:
http://www.sommarskog.se/dyn-search.html

علیرضا حسن زاده
دوشنبه 27 تیر 1390, 18:52 عصر
می دونم که Or باعث کاهش سرعت میشه ولی راه بهتری هم بلد نیستم
تنها راه استفاده از ایندکس به نظرم اومد که ظاهرا هنگام استفاده از Like ایندس نادیده گرفته میشه؟
شما راه کاری برای افزایش سرعت دارین؟

AminSobati
دوشنبه 27 تیر 1390, 21:57 عصر
زمانیکه ابتدای عبارت مورد جستجو مشخص نیست، ایندکس هیچ کمکی نمیتونه انجام بده چون سورت کردن باید از روی ابتدای کلمه شروع بشه. اگر در Like انتهای عبارت % داشته باشه مشکلی نیست و ایندکس کمک میکنه

libertad
پنج شنبه 20 مرداد 1390, 13:17 عصر
اگه نمی خوای کل فیلدهای جدول رو برگردونی از * SELECT استفاده نکن

didaaa
سه شنبه 01 شهریور 1390, 23:49 عصر
دوست عزیز چرا از fts استفاده نمی کنید؟

علیرضا حسن زاده
چهارشنبه 02 شهریور 1390, 09:51 صبح
اگه منظورتون FullText هست بلد نیستم اگه راهنمایی کنید ممنون میشم

barnameali
دوشنبه 14 شهریور 1390, 11:00 صبح
نقل قول: نحوه صحیح ایندکس گذاری برای فیلدهای از نوع Nvarchar


اگه نمی خوای کل فیلدهای جدول رو برگردونی از * SELECT استفاده نکن

سلام
اگر بخواهیم یک فیلد جدول روبرگردونیم از چه دستوری استفاده می کنیم؟

babak2000
یک شنبه 20 شهریور 1390, 09:01 صبح
بجای علامت * نام فیلد مورد نظر را بنویس مثلا نام خانوادگی (LastName)


Select LastName From Table1