نمایش نتایج 1 تا 11 از 11

نام تاپیک: نحوه صحیح ایندکس گذاری برای فیلدهای از نوع Nvarchar

  1. #1
    کاربر دائمی آواتار علیرضا حسن زاده
    تاریخ عضویت
    تیر 1388
    محل زندگی
    تــــــــــــــــــــــــــبریز
    پست
    897

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

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

  2. #2

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

    سلام دوست عزیزم،
    چند نمونه از WHERE که استفاده میکنین رو پست بفرمایید

  3. #3
    کاربر دائمی آواتار علیرضا حسن زاده
    تاریخ عضویت
    تیر 1388
    محل زندگی
    تــــــــــــــــــــــــــبریز
    پست
    897

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

    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) آن وقت برنامه کوئری رو اجرا میکنه تا موارد مشابه رو پیدا کنی و کاربر برای رفتن به فیلد بعدی چند ثانیه منتظر میشه که اغلب خوب نیست و این انتظار رو به پایه عدم کارایی برنامه میزاره

  4. #4

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

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

  5. #5
    کاربر دائمی آواتار علیرضا حسن زاده
    تاریخ عضویت
    تیر 1388
    محل زندگی
    تــــــــــــــــــــــــــبریز
    پست
    897

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

    می دونم که Or باعث کاهش سرعت میشه ولی راه بهتری هم بلد نیستم
    تنها راه استفاده از ایندکس به نظرم اومد که ظاهرا هنگام استفاده از Like ایندس نادیده گرفته میشه؟
    شما راه کاری برای افزایش سرعت دارین؟

  6. #6

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

    زمانیکه ابتدای عبارت مورد جستجو مشخص نیست، ایندکس هیچ کمکی نمیتونه انجام بده چون سورت کردن باید از روی ابتدای کلمه شروع بشه. اگر در Like انتهای عبارت % داشته باشه مشکلی نیست و ایندکس کمک میکنه

  7. #7

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

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

  8. #8

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

    دوست عزیز چرا از fts استفاده نمی کنید؟

  9. #9
    کاربر دائمی آواتار علیرضا حسن زاده
    تاریخ عضویت
    تیر 1388
    محل زندگی
    تــــــــــــــــــــــــــبریز
    پست
    897

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

    اگه منظورتون FullText هست بلد نیستم اگه راهنمایی کنید ممنون میشم

  10. #10

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

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

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

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

  11. #11
    کاربر دائمی
    تاریخ عضویت
    آبان 1385
    محل زندگی
    تهران پر از دود
    پست
    229

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

    بجای علامت * نام فیلد مورد نظر را بنویس مثلا نام خانوادگی (LastName)

    Select LastName From Table1

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •