15-10-18, 06:40 AM
(14-10-18, 05:52 PM)sandanet كتب : ماشاء الله على هذا الحل الجميل المقدم من الاستاذ الدوسري لكن السؤال الذي يطرح نفسه هو هل ان استعمال طريقة الـ REPLACE تبطيء عملية اظهار النتائج ام طريقة LIKE '%".$users1."%' في حال كان عدد السجلات كبير جداً ؟؟
هذة الطريقة الأكيد أنها ليست الأفضل, إذا كان بالإمكان ( فصل اسماء المستخدمين في جدول منفصل ) ( وجدول آخر يربط المستخدمين بالوثائق المصرحة لهم) فهو أفضل بكثير وهو الحل الأمثل .
لكن إذا كان المبرمج مجبر هلى شكل قاعدة البيانات أن تظل كما هي , ما لك إلى أن تستخدم طرق بديلة .
REPLACE فقط لأنه يوجد مسافة بعد كل فاصلة
بإمكانك الإستغناء عن الأمر REPLACE ولكن يجب أن تظيف مسافة في كلمة لبحث :
PHP كود :
SELECT * FROM docs WHERE docs_name != '' AND FIND_IN_SET(' Peter', users) > 0;
طبعاً إذا تبحث عن ملايين السجلات أكيد ستجد ضعف في الأداء , بسبب إستخدام Function في جملة الإستعلام , وهو أمر غير مستغرب لأنه تصميم القاعدة ليس مهيء لعمل علاقة بين المستخدم والوثيقة.
إذا كنت ترى الـ mysql profiler وهو الذي يقوم بتسجيل عمليات التنفيذ على قاعدة البيانات
ستجد أن الـ Function يتم إستدعائها في كل سجل مما يعني لو لديك مليون سجل سيتم إستدعائها مليون مرة .
