السلام، هذه الخاصيه موجوده مع الاصدار الخامس من MySQL وتسمى inline select statement او embedded statement وتتعامل معها مثل الجدول الطبيعي فمثلا تستطيه ان تقول "اعطني كل اسم مستخدم اسمه يبدأ او ينتهي بخالد ولكن سجل بعد العام 2007"
كود:
select * from
( select * from records where register_date > "01-01-2007" )
as smaller_table
where smaller_table.username LIKE "%khalid%" Limit 0,10
ملاحطة: الاستعلام الاول يستطيع استخدامه في امر استعلام واحد ولكن انا استخدمته للشرح فقط
الاستخدام سهل. ولكن له عيوب ومساوء وايظاً ايجابيات، تخيل ان لديك جدول كبير. وتريد ان تأخذ معلومه من جدول وتطابقه بجدول أكبر. مثلا تريد ان تبحث عن عدد الاهدافه للفريق ليفربول بعد العام 2005، كما تعرف جدول الاعبين كبير وعدد الاهداف في جدول الاهداف كبيره جدا؟
فمثلا فعلت هذا
كود:
select count(*) from players,teams,goals
where team.name = "liverpool" and players.team_id = team.id and
goals.player_id = players.id and goals.date > "01-01-05"
فأدا هناك 30 لاعب في ليفر بول و 1000 لاعب في جدول اللاعبين.. و 300 فريق و 10000 هدف في قاعده البيانات، فستبخث في 300 سطر من القرق .. ثم تطابق رقم ذالك الفريق بالاعبين .. فكلما وصلت للاعب من ليفربول ستبحث في جدول الاهداف من اوله الى اخره "ويحتوي على 10000 سجل" ثم تجمع عدد الاهداف و تكرر تلك العمليه 30 مره ثم تفرز جميع الاهداف وتختار ماهو فقط بعد العام 2005 !!!!!! ليش؟؟ اي انك فعلت بحث في (30x10000) زائد 300 زائد 1000 .. اذا بحثت في 301300 سجل لكي تصل للحل !!! لماذا ؟؟
فلتسهيل العمليه هي في تقليل عدد السجلات التي تبحث فيها .. اي اذا عرفت انك ستبحث في جدول كبير ولكن تعرف ان كل الاهداف التي تريد ان تحسبها هي بعد العام 2005 .. فلماذا لا تبحث في المطلوب فقط؟؟
كود:
select count(*) from players,teams,
( select * from goals where date > "01-01-05") as goals
where team.name = "liverpool" and players.team_id = team.id and
goals.player_id = players.id
طبعا هذي الطريقه اسرع . ولكن له عيب وهو انك ستستخدم جدول عشوائي تستخدمه مره واحده وسيكون كليا في الذاكره ويمسح بعد عمليه الاستعلام .. فاستخدم الحل هذا مع السرفرات التي لها رام كبير .. ماعدى ذالك تعلم استخدام الcache او بدأ بقرأه المانوال الخاص في الMySQL في تحسين اداء السرفر ...
اخوك خالد