ورود

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : پیاده سازی یه تیبل Mysql



mehran-b
August 12th, 2017, 00:44
سلام بر دوستان و اساتید محترم

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

36512

جدول مربوط به لغت نامه ای با حدودا 18 هزار کلمه است که توی ستون word خود واژه نوشته شده و توی ستون meaning مترادف واژه.

سوال اینه که کدوم ستون رو یونیک کنم و کدوم ستون رو پرایمری کنم که بالاترین پرمورمنس رو داشته باشه این تیبل؟

تشکر

navid2zp
August 12th, 2017, 00:46
id باید پرایمری و یونیک باشه
word میتونه یونیک باشه (بهتر هست که یونیک باشه)
مورد بعدی هم که فیلد ساده هست

mehran-b
August 12th, 2017, 00:50
id باید پرایمری و یونیک باشه
word میتونه یونیک باشه (بهتر هست که یونیک باشه)
مورد بعدی هم که فیلد ساده هست

وقتی یه چیزی رو یونیک میکنیم چه اتفاقی میوفته از لحاظ پشت پرده ای مظنورمه؟
بعد چرا باید word رو یونیک کنم چرا مثلا نباید meaning رو یونیک کنم؟
بعد یه ستون رو که هم پرایمری میکنیم و هم یونیک چه اتفاقی براش میوفته؟ فرق این دو تا چیه؟

ببخشید سوال ها یکم مبتدیه توی mysql زیاد وارد نیستم.

تشکر

rezaonline.net
August 12th, 2017, 00:50
سلام بر دوستان و اساتید محترم

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

36512

جدول مربوط به لغت نامه ای با حدودا 18 هزار کلمه است که توی ستون word خود واژه نوشته شده و توی ستون meaning مترادف واژه.

سوال اینه که کدوم ستون رو یونیک کنم و کدوم ستون رو پرایمری کنم که بالاترین پرمورمنس رو داشته باشه این تیبل؟

تشکر

سلام
اگر به ازای هر واژه انگلیسی یک واژه فارسی نوشته شده میتونید فیلد انگلیسی رو یونیک بذارید
اما در کل پیشنهاد میکنم هیچ کدام از دو فیلد رو یونیک نذارید و فقط index بذارید .

به ازای هر کلمه انگلیسی اگر چند کلمه فارسی بود برای تک تکشون رکورد ایجاد کنید ، اینطوری میتونید برای فارسی به انلگیسی و انگلیسی به فارسی از دیتابیستون استفاده کنید.
مورد بعدی اینکه دیتاتایپ مناسب varchar هست ، از text استفاده نکنید .

میتونید ترکیبی روی هر دو فیلد هم یونیک بذارید .

- - - Updated - - -


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

یه مثال ساده اینکه
مثلا فرض کنید شما یک جدول برای کاربران دارید ، توی سیستمون به هر کاربر یک id میدید این میشه کلید اصلی
هر کاربر هم ملزم کردید که شماره ملی شو وارد کنه ، قطعا شماره ملی هر کاربری یکتاست ، پس میتونید از شماره ملی هم بعنوان کلید اصلی استفاده کنید اما ترجیحا توی سیستم خودتون از id که تعریف میکنید واسه کلید اصلی استفاده میکنید و سایر فیلد های یکتا بعنوان کلید رزور مورد استفاده قرار میگیرند .


وقتی یه چیزی رو یونیک میکنیم چه اتفاقی میوفته از لحاظ پشت پرده ای مظنورمه؟
ایندکس گذاری چه یکتا باشه یا نباشه ، موجب سرعت در واکشی (select) میشود ، فیلدهایی که یونیک میشوند باید یکتا باشند ، شما نمیتونید دو رکورد تکراری درج کنید دیتابیس خطا میدهد .

mehran-b
August 12th, 2017, 00:55
سلام
اگر به ازای هر واژه انگلیسی یک واژه فارسی نوشته شده میتونید فیلد انگلیسی رو یونیک بذارید
اما در کل پیشنهاد میکنم هیچ کدام از دو فیلد رو یونیک نذارید و فقط index بذارید .

به ازای هر کلمه انگلیسی اگر چند کلمه فارسی بود برای تک تکشون رکورد ایجاد کنید ، اینطوری میتونید برای فارسی به انلگیسی و انگلیسی به فارسی از دیتابیستون استفاده کنید.
مورد بعدی اینکه دیتاتایپ مناسب varchar هست ، از text استفاده نکنید .

میتونید ترکیبی روی هر دو فیلد هم یونیک بذارید .

- - - Updated - - -


فیلدی که کلید اصلی هست قطعا یونیک هست پس نیازی به یونیک کردن ندارد
فیلدی که یونیک هست بعنوان کلید رزرو میتوان استفاده کرد

یه مثال ساده اینکه
مثلا فرض کنید شما یک جدول برای کاربران دارید ، توی سیستمون به هر کاربر یک id میدید این میشه کلید اصلی
هر کاربر هم ملزم کردید که شماره ملی شو وارد کنه ، قطعا شماره ملی هر کاربری یکتاست ، پس میتونید از شماره ملی هم بعنوان کلید اصلی استفاده کنید اما ترجیحا توی سیستم خودتون از id که تعریف میکنید واسه کلید اصلی استفاده میکنید و سایر فیلد های یکتا بعنوان کلید رزور مورد استفاده قرار میگیرند .


ایندکس گذاری چه یکتا باشه یا نباشه ، موجب سرعت در واکشی (select) میشود ، فیلدهایی که یونیک میشوند باید یکتا باشند ، شما نمیتونید دو رکورد تکراری درج کنید دیتابیس خطا میدهد .

هر دو ستون word و meaning فارسی هستند و جستجو در دیتابیس فقط بر اساس واژه های توی ستون word انجام میشه یعنی word جستجو میشه و meaning گرفته میشه.

با توضیح بالا نظرتون چیه؟


36513


به شکل تصویر بالا مورد تایید شما هست؟

rezaonline.net
August 12th, 2017, 01:29
به شکل تصویر بالا مورد تایید شما هست؟
کلید اصلی برای id کافی هست دیگه ایندکس رو بردارید .
روی word هم که کلید گذاشتید حله .

mehran-b
August 12th, 2017, 02:30
کلید اصلی برای id کافی هست دیگه ایندکس رو بردارید .
روی word هم که کلید گذاشتید حله .

فقط جناب شیخله دو سوال میمونه:

اینکه کلید اصلی رو بذاریم روی یه ستون اتوماتیک ایندکس هم میشه؟
سوال بعدی اینکه معمولا ستون هایی رو ایندکس میکنند که بر اساس اون ستون ها سرچ میکنند توی دیتابیس یا خبر؟

navid2zp
August 12th, 2017, 03:47
فقط جناب شیخله دو سوال میمونه:

اینکه کلید اصلی رو بذاریم روی یه ستون اتوماتیک ایندکس هم میشه؟
سوال بعدی اینکه معمولا ستون هایی رو ایندکس میکنند که بر اساس اون ستون ها سرچ میکنند توی دیتابیس یا خبر؟

به طور کل بله
ایندکس ها برای افزایش سرعت سرچ هستند و روی ستون هایی پیاده می شند که همونطور که گفتید سرچ زیادی روشون انجام میشه، تعداد رکورد های تکراری در اون سوتون زیاد هست، قابل نظم دهی هستند (مثل ترتیب حروف الفبا یا اعداد یا تاریخ) و ...

در واقع ایندکس بازه سرچ رو کمتر می کنه تا نیازی نباشه تمامی رکورد ها بررسی بشند

rezaonline.net
August 12th, 2017, 13:51
فقط جناب شیخله دو سوال میمونه:

اینکه کلید اصلی رو بذاریم روی یه ستون اتوماتیک ایندکس هم میشه؟
سوال بعدی اینکه معمولا ستون هایی رو ایندکس میکنند که بر اساس اون ستون ها سرچ میکنند توی دیتابیس یا خبر؟

همانطور که دوستمون پاسخ دادن جواب هر دو سوالتون بله هست .

اما اینکه طرز کار ایندکس رو بدونید دقیقا چطور هست یک مثال ساده و قابل فهمش اینه
قبلنا که تلفن خونگی بود (الانام گاها هست) یک دفترچه تلفن کنارش میذاشتن و اسم افراد رو براساس نام خانوادگی توش درج میکرد .
این یک نوع ایندکس کردن براساس نام خانوادگی بود ، که به راحتی هر وقت میخواستید کسی رو پیدا کنید از اول اسمش شروع میکردید و رجوع میکردید به صفحه مورد نظر .

ایندکس ها دقیقا این کارو میکنن ، براساس فیلدی که انتخاب میکنید یک دفترچه میسازن (یک تیبل مجزا) و بصورت مرتب اون فیلد رو توش قرار میدند تا در فرآیند جستجو سریعتر رکورد مورد نظر رو پیدا کنند.
طبیعتا پر واضح هست که به ازای هر ایندکسی که میسازید یک دفترچه لازم هست ، پس در اصل ایندکس گذاری باید مرتب و اصولی باشه
اگر ایندکس گذاری زیاد باشه ، فرایند insert اطلاعات کند میشه ، حجم دیتابیستون میره بالا .
اگر ایندکس هم نگذارید فرآیند select کند میشه .
لذا اینکه سعی کنید حد اعتدال رو رعایت کنید .
فیلد هایی که همیشه روشون جستجو میشه رو ایندکس بگذارید .