نمایش نتایج: از شماره 1 تا 9 , از مجموع 9

موضوع: پیاده سازی یه تیبل Mysql

  1. #1
    کاربر اخراج شده
    تاریخ عضویت
    Aug 2017
    نوشته ها
    37
    تشکر تشکر کرده 
    43
    تشکر تشکر شده 
    6
    تشکر شده در
    5 پست

    Question پیاده سازی یه تیبل Mysql

    سلام بر دوستان و اساتید محترم

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

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

    تشکر

  2. # ADS




     

  3. #2
    عضو انجمن
    تاریخ عضویت
    Feb 2011
    نوشته ها
    217
    تشکر تشکر کرده 
    524
    تشکر تشکر شده 
    1,363
    تشکر شده در
    624 پست

    پیش فرض پاسخ : پیاده سازی یه تیبل Mysql

    id باید پرایمری و یونیک باشه
    word میتونه یونیک باشه (بهتر هست که یونیک باشه)
    مورد بعدی هم که فیلد ساده هست

  4. تعداد تشکر ها از navid2zp به دلیل پست مفید


  5. #3
    کاربر اخراج شده
    تاریخ عضویت
    Aug 2017
    نوشته ها
    37
    تشکر تشکر کرده 
    43
    تشکر تشکر شده 
    6
    تشکر شده در
    5 پست

    پیش فرض پاسخ : پیاده سازی یه تیبل Mysql

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

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

    تشکر

  6. #4
    عضو انجمن rezaonline.net آواتار ها
    تاریخ عضویت
    Apr 2012
    محل سکونت
    Sanandaj | Tehran
    نوشته ها
    939
    تشکر تشکر کرده 
    1,556
    تشکر تشکر شده 
    2,338
    تشکر شده در
    1,230 پست

    پیش فرض پاسخ : پیاده سازی یه تیبل Mysql

    نقل قول نوشته اصلی توسط mehran-b نمایش پست ها
    سلام بر دوستان و اساتید محترم

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

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

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

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

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

    - - - Updated - - -

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

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

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

  7. تعداد تشکر ها ازrezaonline.net به دلیل پست مفید


  8. #5
    کاربر اخراج شده
    تاریخ عضویت
    Aug 2017
    نوشته ها
    37
    تشکر تشکر کرده 
    43
    تشکر تشکر شده 
    6
    تشکر شده در
    5 پست

    پیش فرض پاسخ : پیاده سازی یه تیبل Mysql

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

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

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

    - - - Updated - - -


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

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


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

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

    به شکل تصویر بالا مورد تایید شما هست؟
    ویرایش توسط mehran-b : August 12th, 2017 در ساعت 01:06

  9. #6
    عضو انجمن rezaonline.net آواتار ها
    تاریخ عضویت
    Apr 2012
    محل سکونت
    Sanandaj | Tehran
    نوشته ها
    939
    تشکر تشکر کرده 
    1,556
    تشکر تشکر شده 
    2,338
    تشکر شده در
    1,230 پست

    پیش فرض پاسخ : پیاده سازی یه تیبل Mysql

    به شکل تصویر بالا مورد تایید شما هست؟
    کلید اصلی برای id کافی هست دیگه ایندکس رو بردارید .
    روی word هم که کلید گذاشتید حله .

  10. تعداد تشکر ها از rezaonline.net به دلیل پست مفید


  11. #7
    کاربر اخراج شده
    تاریخ عضویت
    Aug 2017
    نوشته ها
    37
    تشکر تشکر کرده 
    43
    تشکر تشکر شده 
    6
    تشکر شده در
    5 پست

    پیش فرض پاسخ : پیاده سازی یه تیبل Mysql

    نقل قول نوشته اصلی توسط rezaonline.net نمایش پست ها
    کلید اصلی برای id کافی هست دیگه ایندکس رو بردارید .
    روی word هم که کلید گذاشتید حله .
    فقط جناب شیخله دو سوال میمونه:

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

  12. تعداد تشکر ها از mehran-b به دلیل پست مفید


  13. #8
    عضو انجمن
    تاریخ عضویت
    Feb 2011
    نوشته ها
    217
    تشکر تشکر کرده 
    524
    تشکر تشکر شده 
    1,363
    تشکر شده در
    624 پست

    پیش فرض پاسخ : پیاده سازی یه تیبل Mysql

    نقل قول نوشته اصلی توسط mehran-b نمایش پست ها
    فقط جناب شیخله دو سوال میمونه:

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

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

  14. تعداد تشکر ها ازnavid2zp به دلیل پست مفید


  15. #9
    عضو انجمن rezaonline.net آواتار ها
    تاریخ عضویت
    Apr 2012
    محل سکونت
    Sanandaj | Tehran
    نوشته ها
    939
    تشکر تشکر کرده 
    1,556
    تشکر تشکر شده 
    2,338
    تشکر شده در
    1,230 پست

    پیش فرض پاسخ : پیاده سازی یه تیبل Mysql

    نقل قول نوشته اصلی توسط mehran-b نمایش پست ها
    فقط جناب شیخله دو سوال میمونه:

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

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

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

  16. تعداد تشکر ها ازrezaonline.net به دلیل پست مفید


اطلاعات موضوع

کاربرانی که در حال مشاهده این موضوع هستند

در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)

موضوعات مشابه

  1. پاسخ ها: 2
    آخرين نوشته: July 7th, 2015, 22:54
  2. پاسخ ها: 16
    آخرين نوشته: January 15th, 2015, 21:17
  3. پاسخ ها: 3
    آخرين نوشته: January 13th, 2014, 21:29
  4. وارد کردن نسخه پشتیبان پرحجم MySQL با BigDump
    توسط TruthPraiser در انجمن اسکریپت های دیگر
    پاسخ ها: 0
    آخرين نوشته: November 20th, 2009, 17:49

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •