Panic Dev
1.1K subscribers
123 photos
29 videos
2 files
132 links
Panic Dev; your Panic's solution 🔥

🍿 Telegram
🔰 t.iss.one/PanicDev

🍿 Laravel Community
🔰 t.iss.one/LaravelGroups

😇 Contact Me
🔰 t.iss.one/MentionHex

Thanks for sharing us 💛
Download Telegram
امشب داشتم یک سلکت‌باکس با قابلیت سرچ رو می‌نوشتم که روی 3 تا ستون از یک جدول سرچ میزد
ستون های mobile, email, username و لازم بود که زمانی که ادمین داره سرچ میزنه؛ اولین ستونی که مقدار دهی شده بود به عنوان خروجی به صورت key, value برگشت داده بشه
چالشی که اینجا وجود داشت این بود که احتمال null بودن هر یک از این ستون ها وجود داشت و من توی خروجی نمی‌تونستم به قطعیت بگم که کدوم فیلد رو باید به عنوان label برای اون سلکت‌باکس نشون بدم
بعد از کمی سرچ زدن به یه تابع ساده و کاربردی توی MySQL رسیدم به نام COALESCE که خیلی ساده میتونید از بین n تا ستون؛ اولین ستونی که مقدار داره رو برگردونید

پس به این صورت ازش استفاده کردم
user()
->selectRaw("COALESCE(mobile, email, username) as contact, id")
->where('mobile', 'like', "%$search%")
->orWhere('email', 'like', "%$search%")
->orWhere('username', 'like', "%$search%")
->limit(10)
->get()
->pluck('contact', 'id')

قطعه کد بالا توی جدول users روی سه ستون mobile و email و username سرچ میزنه و به ترتیب اولین ستونی که مقدار داشته باشه رو به عنوان contact بهمون برمیگردونه

🎉 #Query #MySQL #Eloquent #Trick

@PanicDev
👍204
بحث #دیتابیس #mysql

داشتم یک مطلبی میخوندم ،‌ به یک دستوری اشاره کرد به اسم ANALYZE کنجکاو شدم که بدونم به چه کاری میاد و باهاش میشه چیکار کرد .

مواردی که تونستم در بیارم زیاد نبود ،‌
ولی یه خلاصه و چند مورد از سناریو هایی که بهتر هست از این دستور استفاده کنیم رو بخوام بگم. این هستش که :

دستور ANALYZE TABLE یک دستور مفید برای به‌روزرسانی آمار داخلی جدول که به بهینه‌سازی اجرای کوئری‌ها کمک میکنه !

حالا مواردی که اشاره شده بود برای استفاده از این دستور این ها هستش :


زمانی که بعد از تغییرات بزرگ در داده‌ها، کوئری‌ها کند شدند.
زمانی که بعد از افزودن ایندکس، ایندکس استفاده نمی‌شود.
زمانی که MySQL به جای استفاده از ایندکس، کل جدول را اسکن می‌کند.
زمانی که بعد از بازیابی بکاپ، سرعت پایگاه داده کاهش یافته است.
زمانی که جدول را با OPTIMIZE TABLE بهینه کرده‌اید.



✴️ نکات و best practices
🔹 تحلیل منظم: به‌طور مرتب دستور ANALYZE TABLE را روی جداولی که تغییرات داده‌ای زیادی دارند اجرا کنید تا عملکرد کوئری‌ها حفظ شود.

🔹 پایش عملکرد: این دستور را به‌عنوان بخشی از نگهداری دوره‌ای اجرا کنید، به‌ویژه پس از عملیات حجیم روی داده‌ها، تا آمارها به‌روز بمانند.

🔹 توجه به سربار پردازشی: در نظر داشته باشید که ANALYZE TABLE ممکن است هنگام تجزیه و تحلیل، جداول را قفل کند که می‌تواند بر عملیات همزمان تأثیر بگذارد. بهتر است آن را در ساعات کم‌بار اجرا کنید تا اثرات منفی کاهش یابد.

🔹 سازگاری با موتورهای ذخیره‌سازی: این دستور در موتورهای ذخیره‌سازی مانند InnoDB و MyISAM پشتیبانی می‌شود اما ممکن است برای همه موتورهای ذخیره‌سازی قابل استفاده نباشد. قبل از استفاده، از سازگاری آن اطمینان حاصل کنید.

🔹 اجرای خودکار: در برخی شرایط، MySQL ممکن است به‌طور خودکار ANALYZE TABLE را اجرا کند، اما اجرای دستی آن تضمین می‌کند که آمارها به‌روز باشند.

🔹 ارزیابی اثربخشی: برای بررسی تأثیر ANALYZE TABLE، برنامه‌های اجرای کوئری (Execution Plan) را قبل و بعد از آن مقایسه کنید. اگر موتور ذخیره‌سازی شما از آن پشتیبانی نمی‌کند یا باعث افت عملکرد قابل‌توجهی می‌شود، از اجرای آن خودداری کنید.


نکته اضافه :

دستور EXPLAIN ANALYZE در MySQL هم داریم که اطلاعات دقیقی درباره‌ی برنامه‌ی اجرای کوئری میده ،‌ از جمله جزئیات مربوط به تصمیمات بهینه‌ساز، روش‌های دسترسی و هزینه‌های تخمینی. برخلاف EXPLAIN که فقط طرح اجرای کوئری را بدون اجرای واقعی آن نمایش میده EXPLAIN ANALYZE کوئری را اجرا میکنه و آمار زمان اجرا را ارائه می‌کند. این ویژگی یک ابزار ارزشمند برای تحلیل عملکرد کوئری‌ها و شناسایی نقاط قابل بهبود .


منابع که شاید برای مطالعه بیشتر دوست داشته باشید .

- لینک
- لینک
-لینک


#تجربه

خیلی دوست دارم کسانی که تجربه کار با این کامند داشتند ، تجربیاتشون رو با ما به اشتراک بگذارند . تاثیراتی که روی دیتابیس و کوئری ها بوده به چه صورتی بود و چقدر تائیر گذار داشته ، آیا این رو به صورت دوره ای schedule کردن ؟
ایا تجربه بدی هم ازش داشتن .
آیا اطلاعات بیشتری یا سناریو هایی بیشتری میشناسید که از این کامند استفاده کنیم ؟


با اشتراک گذاری اطلاعاتتون مارا خوشحال کنید .
سپاس

@panicdev
👍6