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

نام تاپیک: بهبود کارایی و سرعت در پیاده سازی جستجو بر اساس Tag

  1. #1
    کاربر دائمی
    تاریخ عضویت
    خرداد 1384
    محل زندگی
    شیراز
    پست
    100

    بهبود کارایی و سرعت در پیاده سازی جستجو بر اساس Tag

    سلام
    یه جدول دارم با 100 هزار رکورد (مثلا محصول)
    هر رکورد این جدول دارای 80 تگ هست که در جدول دوم ذخیره میشه وبا کلید خارجی به جدول اول ربط داده میشه-جدول دوم تقریبا 8 میلیون رکورد داره
    هدف جستجو بر اساس تگ ها هس-مثلا محصولاتی که دارای چند تا تگ هستن
    من جداول رو join میکنم و مثلا برای پیدا کردن محصولاتی که 3 تا تگ توشون بکار رفته -یک کوری با 3 تا selectتو در تو بکار میبرم- مشکلم سرعت هست-هر چی تگ ها زیاد تر میشن سرعت کمتر میشه-مثلا برای جستجوی محصولاتی با سه تگ 6 ثانیه زمان میخواد
    آیا این شیوه پیاده سازی برای تگ ها درسته؟
    روش بهتری برای جستجو که سرعتو ببره بالا و جود داره؟
    ممنون از دوستان

  2. #2

    نقل قول: بهبود کارایی و سرعت در پیاده سازی جستجو بر اساس Tag

    سلام.
    ساختار جدولتون اینطور که توضیح دادید مشکلی نداره. ولی کوئری شما ایراد داره.
    بهتره شما ساختار دو جدول و نمونه ای از اطلاعات داخلش و کوئری هم که برای بدست آوردن اطلاعات می نویسید رو اینجا قرار بدید تا بهتر بشه راهنمایی تون کرد.

  3. #3
    کاربر دائمی
    تاریخ عضویت
    خرداد 1384
    محل زندگی
    شیراز
    پست
    100

    Post نقل قول: بهبود کارایی و سرعت در پیاده سازی جستجو بر اساس Tag

    1- جدول اطلاعات عکس Image_Info
    Number bigint و imagename nvarchar

    2-جدول اطلاعات تگ های هر عکس img_tag
    imageid bigint و tagid bigint
    برای جستجو در عکسهای با یک تگ :


    SELECT dbo.Image_Info.Number, dbo.img_tag.tagid
    FROM dbo.Image_Info INNER JOIN
    dbo.img_tag ON dbo.Image_Info.Number = dbo.img_tag.imageid
    WHERE (dbo.img_tag.tagid = 110)




    برای جستجو در عکسهای با دو تگ :



    SELECT dbo.Image_Info.Number, dbo.img_tag.tagid
    FROM dbo.Image_Info INNER JOIN
    dbo.img_tag ON dbo.Image_Info.Number = dbo.img_tag.imageid
    WHERE (dbo.img_tag.tagid = 110) AND (dbo.Image_Info.Number IN
    (SELECT Image_Info_1.Number
    FROM dbo.img_tag AS img_tag_1 INNER JOIN
    dbo.Image_Info AS Image_Info_1 ON img_tag_1.imageid = Image_Info_1.Number
    WHERE (img_tag_1.tagid = 660)))



    برای جستجو در عکسهای با سه تگ :



    SELECT dbo.Image_Info.Number, dbo.img_tag.tagid
    FROM dbo.Image_Info INNER JOIN
    dbo.img_tag ON dbo.Image_Info.Number = dbo.img_tag.imageid
    WHERE (dbo.img_tag.tagid = 110) AND (dbo.Image_Info.Number IN
    (SELECT Image_Info_1.Number
    FROM dbo.img_tag AS img_tag_1 INNER JOIN
    dbo.Image_Info AS Image_Info_1 ON img_tag_1.imageid = Image_Info_1.Number
    WHERE (img_tag_1.tagid = 660) AND (dbo.Image_Info.Number IN
    (SELECT Image_Info_1.Number
    FROM dbo.img_tag AS img_tag_1 INNER JOIN
    dbo.Image_Info AS Image_Info_1 ON img_tag_1.imageid = Image_Info_1.Number
    WHERE (img_tag_1.tagid = 670)))))




    که باselect های تو در تو پیاده سازی میکنم

    آیا از این روش بهینه تری هم وجود داره؟
    برای پیدا کردن عکسی با 5 تگ 6 ثانیه زمان صرف میشه
    آیا میشه روی فیلد img_tag ایندکس تعریف کنم
    آیا تاثیری تو سرعت داره؟
    اگه ایندکس تعریف کنم آیا تغییری تو نحوه دستوراتم باید بدم؟
    ممنون از توجه و راهنماییتون

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

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