/
  • جایگزین برای GROUP BY

  • ارسال پاسخ   امتیاز موضوع:
    • 0 رأی - میانگین امیتازات: 0
    • 1
    • 2
    • 3
    • 4
    • 5

    حالت موضوعی | حالت خطی جایگزین برای GROUP BY
    نویسنده پیام
    voltan آفلاین
    حسین عزیزآبادی
    ****

    ارسال‌ها: 309
    تاریخ عضویت: ۱۳۸۹ مهر ۲۵
    اعتبار: 2
    تشکرها : 140
    ( 200 تشکر در 117 ارسال )
    ارسال: #1
    جایگزین برای GROUP BY
    سلام
    دارم روی یه سیستم خبر / وبلاگ کار میکنم. جدیدا بهش آپشن مولتی کتیگوری اضافه کردم. برای این کار یه جدول ساختم و شماره خبر و شاخه رو توش ذخیره میکنم. به این صورت که اگه یه خبر مثلا توی ۵ تا شاخه باشه پنج ردیف جدید به اون جدول اضافه میشه.

    برای خروجی گرفتن از اون جدول برای اینکه خروجی آی دی خبر یکتا باشه همچین کوئری نوشتم

    [undefined=undefined]
    SELECT `story` FROM `news_link` WHERE (`topic` IN (1, 2) AND `status` = 1) GROUP BY `story` ORDER BY `publish` DESC, `id` DESC LIMIT 10[/undefined]

    برای تست حدود ۵۰۰۰۰ تا خبر رو به صورت رندم توی شاخه های مختلف وارد کردم و اون جدول لینک که اطلاعات شاخه - خبر توشه حدود ۸۵۰۰۰ ردیف داره. وقتی از کوئری بالا برای گرفتن نتایج استفاده میکنم زمان اجرا کوئری 0.1211 است و وقتی GROUP BY `story رو حذف میکنم این زمان تا حد 0.0005 ثانیه افت پیدا میکنه.

    پیشنهادی دارید که چطوری این کوئری رو اجرا کنم که زمان کمتری ببره و بهینه تر بشه؟

    ساختار اون جدوله هم اینه
    [undefined=undefined]
    CREATE TABLE `news_link` (
    `id` int (10) unsigned NOT NULL auto_increment,
    `story` int(10) unsigned NOT NULL,
    `topic` int(10) unsigned NOT NULL,
    `publish` int(10) unsigned NOT NULL,
    `status` tinyint(1) unsigned NOT NULL,
    `author` int(10) unsigned NOT NULL,
    PRIMARY KEY (`id`),
    KEY `story` (`story`),
    KEY `topic` (`topic`),
    KEY `publish` (`publish`),
    KEY `status` (`status`),
    KEY `author` (`author`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;[/undefined]
    __________________________________________________________________________
    فراگسترش
    Pi Engine - Powered By ZF2
    Pi Engine Modules
    (آخرین ویرایش در این ارسال: ۱۳۹۱ آذر ۳ ۰۳:۰۵ عصر، توسط voltan.)
    ۱۳۹۱ آذر ۳ ۰۲:۵۸ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    Reza آفلاین
    رضا شیخله
    *****

    ارسال‌ها: 3,024
    تاریخ عضویت: ۱۳۹۰ آبان ۱۶
    اعتبار: 133
    تشکرها : 2724
    ( 2715 تشکر در 1691 ارسال )
    ارسال: #2
    RE: جایگزین برای GROUP BY
    order by rand() بزن
    __________________________________________________________________________
    -- - RezaWorkShop.ir - blog.RezaOnline.net
    ۱۳۹۱ آذر ۳ ۱۱:۰۹ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط :
    voltan آفلاین
    حسین عزیزآبادی
    ****

    ارسال‌ها: 309
    تاریخ عضویت: ۱۳۸۹ مهر ۲۵
    اعتبار: 2
    تشکرها : 140
    ( 200 تشکر در 117 ارسال )
    ارسال: #3
    RE: جایگزین برای GROUP BY
    این خروجی رندم نمیده؟
    __________________________________________________________________________
    فراگسترش
    Pi Engine - Powered By ZF2
    Pi Engine Modules
    ۱۳۹۱ آذر ۳ ۱۱:۵۱ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    Reza آفلاین
    رضا شیخله
    *****

    ارسال‌ها: 3,024
    تاریخ عضویت: ۱۳۹۰ آبان ۱۶
    اعتبار: 133
    تشکرها : 2724
    ( 2715 تشکر در 1691 ارسال )
    ارسال: #4
    RE: جایگزین برای GROUP BY
    ببخشید من کلاً گیج شدم فکر کردم میخوای خروجی رندم بگیری Blush
    اینو امتحان کن
    کد:
    SELECT DISTINCT `story` FROM `news_link` WHERE (`topic` IN (1, 2) AND `status` = 1)  ORDER BY `publish` DESC, `id` DESC LIMIT 10
    __________________________________________________________________________
    -- - RezaWorkShop.ir - blog.RezaOnline.net
    ۱۳۹۱ آذر ۴ ۰۲:۲۱ صبح
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط : voltan
    voltan آفلاین
    حسین عزیزآبادی
    ****

    ارسال‌ها: 309
    تاریخ عضویت: ۱۳۸۹ مهر ۲۵
    اعتبار: 2
    تشکرها : 140
    ( 200 تشکر در 117 ارسال )
    ارسال: #5
    RE: جایگزین برای GROUP BY
    دستت درد نکنه ! DISTINCT کارم رو راه انداخت
    __________________________________________________________________________
    فراگسترش
    Pi Engine - Powered By ZF2
    Pi Engine Modules
    ۱۳۹۱ آذر ۴ ۱۱:۲۸ صبح
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    Reza آفلاین
    رضا شیخله
    *****

    ارسال‌ها: 3,024
    تاریخ عضویت: ۱۳۹۰ آبان ۱۶
    اعتبار: 133
    تشکرها : 2724
    ( 2715 تشکر در 1691 ارسال )
    ارسال: #6
    RE: جایگزین برای GROUP BY
    زمان اجراش چقدر بود ؟
    __________________________________________________________________________
    -- - RezaWorkShop.ir - blog.RezaOnline.net
    ۱۳۹۱ آذر ۴ ۰۳:۳۷ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط :
    voltan آفلاین
    حسین عزیزآبادی
    ****

    ارسال‌ها: 309
    تاریخ عضویت: ۱۳۸۹ مهر ۲۵
    اعتبار: 2
    تشکرها : 140
    ( 200 تشکر در 117 ارسال )
    ارسال: #7
    RE: جایگزین برای GROUP BY
    خیلی کمتر چیزی حدود 0.0010 ثانیه. الان روی یه جدول با حدود ۹۵۰۰ ردیف داره تست میگیرم زمانی حدود 0.0007 داره.
    __________________________________________________________________________
    فراگسترش
    Pi Engine - Powered By ZF2
    Pi Engine Modules
    (آخرین ویرایش در این ارسال: ۱۳۹۱ آذر ۴ ۰۴:۵۱ عصر، توسط voltan.)
    ۱۳۹۱ آذر ۴ ۰۴:۵۱ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    « قدیمی تر | تازه‌ تر »

    ارسال پاسخ
    پرش به انجمن:


    کاربرانِ درحال بازدید از این موضوع: 1 مهمان
    IranPHP.org | تماس با ما | بازگشت به بالا | بازگشت به محتوا | بایگانی | پیوند سایتی RSS