PDA

View Full Version : سوال: ازمایش mysql با php



soroushhhh
جمعه 24 دی 1395, 21:05 عصر
سلام
من روی یک لوکال هاست با php یک لوپ ایجاد کردم که یک میلیون رکورد رو وارد پایگاه داده mysql کنه.این کارو برا تحقیق روی myisam و innodb انجام دادم.3 تا سوال برام پیش اومده
1--یک میلیون رکورد با myisam در حدود چند دقیقه طول کشید تا وارد پایگاه داده شد ولی با innodb چن ساعت طول کشید(set_time_limit(0) رو php صفر گذاشتم).چرا این قد اختلاف؟؟؟؟؟؟
2--تعداد رکوردها در myisam چن ده هزار بیشتر از یک میلیون بود ولی تو innodb کمتر بود!!!:متعجب::متعجب: .چرا این جوری؟؟؟؟؟؟
3--سرعت select توی myisam خیلی خیلی بیشتر از innodb بود.من میدونم باید بیشتر باشه ولی خیلی اختلاف زیاده .چرا این جوری؟؟؟؟؟؟؟

SlowCode
دوشنبه 04 بهمن 1395, 20:33 عصر
سلام
دلایل مختلفی میتونه داشته باشه که به نظرم مهم ترین عامل اینه که انجین innodb به طور پیشفرض از ایندکس گزاری Clustered و روش B-Tree استفاده میکنه.
ما دو نوع ایندکس گزاری داریم:
1- Non Clustered Index که داده ها به صورت مجازی مرتب میشن
2- Clustered Index که داده ها در سطح فیزیکی مرتب سازی میشن، تو این حالت سرعت عملیات نوشتن کندتره اما سرعت عملیات خواندن بیشتره

علاوه بر این الگوریتم های مختلفی برای نوع ایندکس هست که mysql فقط از نوع b-tree یا همون باینری پشتیبانی میکنه و یه عملیات دیگه هست کلا که مقادیر یک یا چندین ستون رو جداگانه ذخیره میکنه تا سرعت query های select شما خیلی زیاد بشه.

پس وقتی شما یه داده رو تو innodb درج میکنین 2 عملیات اضافه انجام میشه یکی واسه index کردن یکی هم واسه clustered کردن.
عوامل دیگه ای هم ممکنه تاثیرگزار باشن! مثلا به خاطر اضافه شدن امکاناتی مثل transaction, ... هم ممکنه افت سرعت نسبت به وجود بیاد(اما اینا حدس و فرضیه هستن)

ولی اینکه میگین سرعت سلکت myisam بیشتره عجیبه! چون ایندکس نداره که!