PDA

View Full Version : راه حلی برای این مشکل با mysql



hesam67_b
دوشنبه 30 فروردین 1395, 03:51 صبح
با سلام. امیدوارم منظور منو درست متوجه بشید.
سوالم رو در غالب یک مثال عنوان میکنم:
فرض کنید دوتا جدول داریم: A و B. که هردو جدول هم حجیم هست.
و فرض کنیدجدول A مربوط به اطلاعات شخص باشه و جدول B هم جدول روابط این افراد باهم باشه.
چطور میتونیم لیستی از افراد رو از جدول A دربیارم که شخص x باهاشون ارتباطی نداره (در جدول B ارتباطی ذکر نشده براش)؟
راه حلی مناسب برای جدول های حجیم میخوام که سرعت بالایی داشته باشه.
از اونجایی که در جدول B مقادیر تکراری وجود داره، ایندکس گذاری نمیتونه زیاد کمک کنه.

Mahmood_M
دوشنبه 06 اردیبهشت 1395, 09:57 صبح
باید دید که ارتباط به چه صورتی هست، یعنی چه فیلدهایی درگیر این ارتباط هستند
مثلا فرض کنیم هر شخص یک نام کاربری داره، در جدول A فیلدی داریم به نام UName و در جدول ارتباط ها فیلد های U1Name و U2Name ، در این صورت با Query زیر می تونید به نتیجه موردنظر برسید :

Select UName From User_table WHERE UName Not IN
(Select UName From User_table U Join Relation_Table R ON
(U.UName = R.U1Name OR U.UName = R.U2Name)
WHERE (R.U1Name = 'X') OR (R.U2Name = 'X'))

از اونجایی که در جدول B مقادیر تکراری وجود داره، ایندکس گذاری نمیتونه زیاد کمک کنه
ایندکس گذاری برای JOIN و WHERE به شدت مفیده ، در مواقعی که مقدار تکراری وجود داره، باز هم مفید خواهد بود، چون تنوع مقدار در فیلد UName بالاست، ایندکس برای فیلد هایی مثلا با مقادیر Boolean یا مثلا فیلد جنسیت افراد ( که دو مقدار می گیره ) نمی تونه زیاد مفید باشه مگر اینکه این فیلد رو همراه سایر فیلد هایی که مقادیر تکراری ندارند در شرط Where به کار ببرید