PDA

View Full Version : سوال: آیا این شرط که روی کلیدهای اولیه یه جدول اجرا می شه همواره درسته؟



idocsidocs
جمعه 19 اسفند 1390, 13:44 عصر
اگر id کلید اولیه باشه آیا کوئری زیر روی همه سطرهای دیتابیس همواره درست هست؟

SELECT * FROM `tb` WHERE (`id`='1') LIMIT 1
این کوئری چطور؟

SELECT * FROM `tb` WHERE (1=1) LIMIT 1
لطفا توضیح بدید.

hightech
جمعه 19 اسفند 1390, 18:56 عصر
در مورد اولی، خیر حتی اگه id کلید اصلی باشه در صورتیکه order by استفاده نکنید اولین نتیجه ای که بدست میاره رو براتون برمیگردونه تقریبا حالت تصادفی داره و نمیشه با اطمینان گفت همیشه نتیجه یکی هست
در مورد دومی، شرط where مثل اینه که اصلا شرطی وجود نداره و فورا اولین رکوردی که پیدا میشه رو برمیگردونه (به همون شکل موجود توی جدول)

narsic
جمعه 19 اسفند 1390, 19:14 عصر
اگه فیلد ID کلید اصلی شما باشه این دستور همیشه یک سطر رو بر میگردون و اون سطری هست که مقدار فیلد Id ّرابر با 1 است.
و دومی

در مورد دومی، شرط where مثل اینه که اصلا شرطی وجود نداره و فورا اولین رکوردی که پیدا میشه رو برمیگردونه (به همون شکل موجود توی جدول)
موفق باشید

idocsidocs
جمعه 19 اسفند 1390, 20:07 عصر
در مورد اولی، خیر حتی اگه id کلید اصلی باشه در صورتیکه order by استفاده نکنید اولین نتیجه ای که بدست میاره رو براتون برمیگردونه تقریبا حالت تصادفی داره و نمیشه با اطمینان گفت همیشه نتیجه یکی هست
چرا تقریبا؟

hightech
جمعه 19 اسفند 1390, 20:44 عصر
چون رکوردها رو به ترتیبی که توی جدول نوشته شده، میخونه و این ترتیب نوشتن لزوما بر اساس زمان نیست و ممکنه بعد از حذف و اضافه، بهینه سازی یا سایر عملیات تغییر کنه

idocsidocs
جمعه 19 اسفند 1390, 20:55 عصر
چون رکوردها رو به ترتیبی که توی جدول نوشته شده، میخونه و این ترتیب نوشتن لزوما بر اساس زمان نیست و ممکنه بعد از حذف و اضافه، بهینه سازی یا سایر عملیات تغییر کنه

بهینه سازی فقط توی موتورهای innobod انجام می شه و توی همه موارد کاربرد نداره.

hightech
جمعه 19 اسفند 1390, 21:16 عصر
نقل از سایت mysql


OPTIMIZE TABLE works only for MyISAM, InnoDB, and (as of MySQL 5.0.16) ARCHIVE tables

narsic
جمعه 19 اسفند 1390, 21:33 عصر
دوست من hightech جان، دستور اول همیشه یک رکورد رو بر میگردونه نه اولین رکوردی رو که پیدا کنه (با توجه به کلید اصلی بودن فیلد)

hightech
جمعه 19 اسفند 1390, 22:13 عصر
دوست من hightech جان، دستور اول همیشه یک رکورد رو بر میگردونه نه اولین رکوردی رو که پیدا کنه (با توجه به کلید اصلی بودن فیلد)
کاملا درسته، حواسم به کلید اصلی نبود چون این کلید یکتا هست
اینی که نوشتم در مورد index بود
ممنون از تذکرتون

idocsidocs
شنبه 20 اسفند 1390, 02:30 صبح
دوستان مرسی لطفا توی این تاپک هم راهنمایی کنید. (http://barnamenevis.org/showthread.php?331581-%D8%AF%D8%B3%D8%AA%D9%88%D8%B1%D8%A7%D8%AA-%D8%B4%D8%B1%D8%B7%DB%8C-%D8%A8%D9%87-%DA%86%D9%87-%D8%B4%DA%A9%D9%84-%D8%AA%D9%88%DB%8C-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-%D8%A7%D8%AC%D8%B1%D8%A7-%D9%85%DB%8C-%D8%B4%D9%86-%D8%9F)