PDA

View Full Version : سوال: یک select سنگین



fh_joker
دوشنبه 20 اردیبهشت 1395, 11:36 صبح
سلام
نعداد رکورد ها تقریبا 330,000 سطر هست ، تازه احتمال افزایش هم داره.
توی قسمتی از برنامه آمار گیری هست و باید از این جدول یه سلکت کنم
حالا زمان اجراش خیلی میره بالا.
یه شرط where هم دارم که وقتی اونو اضافه می کنم تا اجرا کنه صبح شده.
ram و cpu هم مناسب هست.
پیشنهادی برای بهتر شدنش ندارید؟
ممنون

mazi76
دوشنبه 20 اردیبهشت 1395, 13:54 عصر
صفحه بندی کنید
مثلا باorder by `id` DESC limit 10
هر 10 رو نمایش بده

Unique
دوشنبه 20 اردیبهشت 1395, 16:06 عصر
توی قسمتی از برنامه آمار گیری هست و باید از این جدول یه سلکت کنم
تا زمانی که اصل query را نگذارین نمیشه نظر داد ،‌ شما اگه دارین همه رکورد ها را fetch میکنید که کلا کارتون اشتباهه ! چون میگین آماری احتمالا میخواین جمع کنید یا میانگین بگیرین یا جمع ضرب چیزی را بدست بیارین و از این حرفا که برای این کار ها نیاز به select کل جدول نیست و باید دستور query را برای آمارگیری تغییر بدین. 330000 رکورد خیلی هم نیست. مشکل در منطق برنامه شماست.

fh_joker
سه شنبه 21 اردیبهشت 1395, 10:26 صبح
330000 رکورد خیلی هم نیست. مشکل در منطق برنامه شماست.

خودم هم همین نظر رو دارم دیروز که جستجو می کردم ، بیش از یک میلیون رکورد هم بود
دو تا آمار دارم یکی برای کل ، یکی برای امروز.
آمارهایی که نمایش میدم:
تعداد کل محصولات ، تعداد محصولات ورودی ، تعداد محصولات خروجی ،تعداد برگشتی ها ، بیشترین ورودی ، بیشترین فروش ، بیشترین برگشتی
اینها رو هم برای امروز دارم هم کل. برای هر کدوم هم یه تابع جدا نوشتم که فراخوانی می کنم.
اولش که داده ها کم بود و مشکلی نبود از خود جدول اصلی می گرفتم.
ولی بعدش زیاد شد و سنگین.
اومدم یه view ساختم ، با limit 1000 و ordey by ID ، حالا از این view سلکت می کنم. ساخت همین view زمانبر شده . اگرم view رو بردارم که دیگه بسیار طولانی میشه.
نمی دونم الان کدوم کوئری رو بزارم . این ها view ها هستن.

CREATE OR REPLACE View `dashboard` as SELECT * FROM `product` ORDER BY `product`.`ID` DESC limit 0,1000

بعد چون معمولا روزانه هم در همین قرار می گرفت view بعدی رو از`dashboard`گرفتم.

CREATE OR REPLACE View `todey` as SELECT SELECT * FROM `dashboard` WHERE flMM_DD = '1395-02-19'

یعنی فکر میکنید نباید به صورت تابع می نوشتم؟؟؟؟؟
پس چه کارش کنم؟

Unique
سه شنبه 21 اردیبهشت 1395, 21:33 عصر
بله نیاز بررسی تک به تک رکورد ها نیست با ۷ یا ۸ تا query و count و max و sum توی group by راحت میشه این آمار را توی چند ثانیه به دست آپرد اگه relation ها و index گذاری ها صحیح همراه با نرمال سازی باشی !