تقنيات تحسين استعلام SQL

تقنيات تحسين استعلام SQL

عقدة المصدر: 1985278

تقنيات تحسين استعلام SQL
صورة المؤلف
 

على مستوى المبتدئين ، نحن نركز فقط على كتابة وتشغيل استعلامات SQL. نحن لا نهتم بمدى الوقت الذي يستغرقه التنفيذ أو ما إذا كان يمكنه التعامل مع ملايين السجلات. ولكن على المستوى المتوسط ​​، يتوقع الأشخاص تحسين استعلامك وأن يستغرق تنفيذه الحد الأدنى من الوقت.

من الضروري كتابة استعلام محسن في التطبيقات الكبيرة التي تحتوي على ملايين السجلات ، مثل منصات التجارة الإلكترونية أو الأنظمة المصرفية. لنفترض أنك تمتلك شركة تجارة إلكترونية بها أكثر من مليون منتج ، ويريد أحد العملاء البحث عن منتج. ماذا لو استغرق الاستعلام الذي كتبته في الخلفية أكثر من دقيقة لجلب هذا المنتج من قاعدة البيانات؟ هل تعتقد أن العملاء يشترون المنتجات من موقع الويب الخاص بك؟

عليك أن تفهم أهمية تحسين استعلام SQL. في هذا البرنامج التعليمي ، سأعرض لك بعض النصائح والحيل لتحسين استعلامات SQL الخاصة بك وجعلها تنفذ بشكل أسرع. الشرط الأساسي هو أنه يجب أن يكون لديك معرفة أساسية بـ SQL.

للتحقق مما إذا كان عنصر معين موجودًا في الجدول ، استخدم EXIST() الكلمة الأساسية بدلاً من COUNT() سيتم تشغيل الاستعلام بطريقة أفضل.

باستخدام COUNT()، يحتاج الاستعلام إلى حساب جميع تكرارات هذا العنصر المحدد والتي قد تكون غير فعالة عندما تكون قاعدة البيانات واسعة النطاق. على الجانب الآخر، EXIST() سيتحقق فقط من التواجد الأول لهذا العنصر ثم يتوقف عند العثور على التكرار الأول. وهذا يوفر الكثير من الوقت.

أيضًا ، أنت مهتم فقط بمعرفة ما إذا كان عنصر معين موجودًا أم لا. أنت غير مهتم بالعثور على عدد التكرارات. لهذا السبب أيضًا EXIST() هو أفضل.

SELECT EXISTS( SELECT * FROM table WHERE myColumn = 'val' );

 

سيعود الاستعلام أعلاه 1 إذا كان صف جدول واحد على الأقل يحتوي على إدخال حيث يتم تسمية العمود myColumn له قيمة تساوي فال. خلاف ذلك ، سوف يعود 0.

يبلغ قطر كلاً من char و varchar تُستخدم أنواع البيانات لتخزين سلاسل الأحرف في الجدول. لكن varchar أكثر كفاءة في استخدام الذاكرة من char

يمكن لنوع البيانات char فقط تخزين سلسلة الأحرف ذات الطول المحدد المحدد. إذا كان طول السلسلة أقل من الطول الثابت ، فسيتم حشو الفراغات لجعل طولها مساويًا للطول المحدد. سيؤدي ذلك إلى إضاعة الذاكرة في الحشو دون داع. على سبيل المثال،CHAR(100) سيستغرق 100 بايت من الذاكرة حتى لو تم تخزين حرف واحد.

من ناحية أخرى ، يقوم varchar datatype بتخزين سلسلة الأحرف ذات الطول المتغير الذي يكون طوله أقل من الحد الأقصى للطول المحدد. لا يملأ الفراغات ويأخذ الذاكرة مساوية لطول السلسلة الفعلي فقط. على سبيل المثال، VARCHAR(100) لا يستغرق سوى بايت واحد من الذاكرة عند تخزين حرف واحد.

CREATE TABLE myTable ( id INT PRIMARY KEY, charCol CHAR(10), varcharCol VARCHAR(10)
);

 

في المثال أعلاه ، جدول myTable تم إنشاؤه من عمودين ، charCol و varcharCol وجود أنواع بيانات char و varchar على التوالي. charCol سيستغرق دائمًا 10 بايت من الذاكرة. في المقابل، varcharCol تأخذ ذاكرة مساوية للحجم الفعلي لسلسلة الأحرف المخزنة فيها.

يجب أن نتجنب استخدام الاستعلامات الفرعية داخل جملة WHERE لتحسين استعلام SQL. نظرًا لأن الاستعلامات الفرعية يمكن أن تكون باهظة الثمن ويصعب تنفيذها عند إرجاع عدد كبير من الصفوف.

بدلاً من استخدام الاستعلام الفرعي ، يمكنك الحصول على نفس النتيجة باستخدام عملية ربط أو كتابة استعلام فرعي مرتبط. الاستعلام الفرعي المرتبط هو استعلام فرعي يعتمد فيه الاستعلام الداخلي على الاستعلام الخارجي. وهي فعالة للغاية مقارنة بالاستعلام الفرعي غير المرتبط.

يوجد أدناه مثال لفهم الفرق بين الاثنين.

# Using a subquery
SELECT * FROM orders WHERE customer_id IN ( SELECT id FROM customers WHERE country = 'INDIA' ); # Using a join operation
SELECT orders.* FROM orders JOIN customers ON orders.customer_id = customers.id WHERE customers.country = 'INDIA';

 

في المثال الأول ، يجمع الاستعلام الفرعي أولاً جميع معرفات العملاء التي تنتمي إلى الهند ، ثم سيحصل الاستعلام الخارجي على جميع أوامر معرفات العملاء المحددة. وفي المثال الثاني ، حققنا نفس النتيجة من خلال الانضمام إلى customers و orders الجداول ثم تحديد الطلبات التي ينتمي إليها العملاء فقط من الهند.

بهذه الطريقة ، يمكننا تحسين الاستعلام عن طريق تجنب استخدام الاستعلامات الفرعية داخل جملة WHERE وتسهيل قراءتها وفهمها. 

تطبيق JOIN التشغيل من جدول أكبر إلى جدول أصغر هو أسلوب شائع لتحسين SQL. لأن الانضمام من جدول أكبر إلى جدول أصغر سيجعل تنفيذ الاستعلام أسرع. إذا طبقنا أ JOIN التشغيل من جدول أصغر إلى جدول أكبر ، يتعين على محرك SQL الخاص بنا البحث في جدول أكبر عن الصفوف المطابقة. وهذا يتطلب الكثير من الموارد ويستغرق وقتًا طويلاً. ولكن من ناحية أخرى ، إذا كان JOIN يتم تطبيقه من جدول أكبر إلى جدول أصغر ، ثم يتعين على محرك SQL البحث في جدول أصغر عن الصفوف المطابقة.

هنا مثال لتفهمك بشكل أفضل.

# Order table is larger than the Customer table # Join from a larger table to a smaller table
SELECT * FROM Order JOIN Customer ON Customer.id = Order.id # Join from a smaller table to a larger table
SELECT * FROM Customer JOIN Order ON Customer.id = Order.id

وخلافا لل LIKE بند، regexp_like يستخدم أيضًا للبحث عن الأنماط. ال LIKE الشرط هو عامل أساسي لمطابقة الأنماط يمكنه تنفيذ العمليات الأساسية فقط مثل _ or %، والتي تُستخدم لمطابقة حرف واحد أو أي عدد من الأحرف على التوالي. ال LIKE يجب أن تفحص الجملة قاعدة البيانات الكاملة للعثور على النمط المعين ، والذي يكون بطيئًا بالنسبة للجداول الكبيرة.

من ناحية أخرى، regexp_like هي تقنية أكثر كفاءة ومحسّنة وفعالية للبحث عن الأنماط. يستخدم تعبيرات منتظمة أكثر تعقيدًا للعثور على أنماط معينة في سلسلة الأحرف. هذه التعبيرات النمطية أكثر تحديدًا من مطابقة أحرف البدل البسيطة لأنها تسمح لك بالبحث عن النمط الدقيق الذي نعثر عليه. نتيجة لهذا ، يتم تقليل كمية البيانات التي يجب البحث عنها ، ويتم تنفيذ الاستعلام بشكل أسرع.

يرجى ملاحظة أن regexp_like قد لا تكون موجودة في جميع أنظمة إدارة قواعد البيانات. قد يختلف تركيبه ووظائفه في الأنظمة الأخرى.

هنا مثال لتفهمك بشكل أفضل.

# Query using the LIKE clause
SELECT * FROM mytable WHERE ( name LIKE 'A%' OR name LIKE 'B%' ); # Query using regexp_like clause
SELECT * FROM mytable WHERE regexp_like(name, '^[AB].*');

 

تُستخدم الاستعلامات أعلاه للعثور على العناصر التي يبدأ اسمها بالحرف A أو B. في المثال الأول ، LIKE يستخدم للبحث في جميع الأسماء التي تبدأ بحرف A أو B. A% يعني أن الحرف الأول هو A ؛ بعد ذلك ، يمكن أن يتواجد أي عدد من الأحرف. في المثال الثاني ، regexp_like يستخدم. داخل ^[AB], ^ يمثل أن الرمز سيتطابق في بداية السلسلة ، [AB] يمثل أن حرف البداية يمكن أن يكون A أو B ، و .* يمثل جميع الشخصيات بعد ذلك.

باستخدام regexp_like، يمكن لقاعدة البيانات تصفية الصفوف التي لا تتطابق مع النمط بسرعة ، وتحسين الأداء وتقليل استخدام الموارد.

في هذه المقالة ، ناقشنا طرقًا ونصائح مختلفة لتحسين استعلام SQL. تمنحك هذه المقالة فهمًا واضحًا لكيفية كتابة استعلامات SQL فعالة وأهمية تحسينها. هناك العديد من الطرق لتحسين الاستعلامات ، مثل تفضيل استخدام قيم الأعداد الصحيحة بدلاً من الأحرف أو استخدام Union All بدلاً من Union عندما لا يحتوي جدولك على نسخ مكررة ، إلخ.
 
 
آريان جارج هو بي تك. طالب هندسة كهربائية ، حاليا في السنة الأخيرة من دراسته الجامعية. يكمن اهتمامه في مجال تطوير الويب والتعلم الآلي. لقد سعى وراء هذا الاهتمام وأنا حريص على العمل أكثر في هذه الاتجاهات.
 

الطابع الزمني:

اكثر من KD nuggets