Skip to main content

الجزء ال20: فوائد الأجراء المخزن Advantages of Stored Procedures

الجزء ال20: فوائد الأجراء المخزن

Advantages of Stored Procedures

يتلخص فوائد استخدام الأجراء المخزن بخمس نقاط اساسية:
  1.  Execution plan retention and reusability.
  2.  Reduces network traffic.
  3. Code re-usability and better maintainability.
  4. Better Security.
  5. Avoids SQL Injection attack.
سأشرح بأختصار معنى كلً من النقاط الخمس:


1.   Execution plan retention and reusability.

جملة الأستعلام لها تسميات عدة يجب معرفتها :(Inline SQL) او (Adhoc queries )  او (query statement) , المهم, عند تنفيذ اي جملة استعلام ثلاث امور يتم اجراءُها من قبل SQL Server وهي كالأتي:
1.      تفقد تركيب جملة الأستعلام Check Query Syntax.
2.      عملية التجميع جملة الأستعلام Compile
3.      تنفيذ جملة الأستعلام Execute
وبعد اجراء الخطوات الثلاث يتم تخزين (cache)  هذه الخطوات داخل الSQL Server, وبهذا عند تنفيذ نفس جملة الأستعلام لا يتم اجراء الخطوات الثلاث مرة اخرى! وتسمى هذه العملية ب(Execution plan), بمساعدة الIndexes.

ولكن السؤال هنا اذا كانت جمل الأستعلام تعمل على تخزين Execution plan داخل الSQL Server والأجراء المخزن يعمل نفس المبدأ فما الفرق في هذه النقطة؟!
الجواب:  لنأخذ المثال التالي:
SELECT Name,Salary FROM tblEmployees WHERE ID = 1
SELECT Name,Salary FROM tblEmployees WHERE ID = 2
الفرق بين الأثنين فقط بقيمة المعرف ID ورغم ذلك سيتم اجراء Execution plan  لكل منهما!!!


بينما في الأجراء التالي:
CREATE PROC spGetEmpInfo
@ID int
AS
BEGIN
SELECT Name,Salary
FROM tblEmployees
WHERE ID = @ID
END
Execution plan واحدة فقط للأجراء اذا كانت قيمة الID 1 او 2 او....
EXEC spGetEmpInfo @ID = 1
EXEC spGetEmpInfo @ID = 2
فبهذا هذه النقطة لصالح الأجراء المخزن من ناحية الأداء Performance
وبالنسبة لمفهوم الreusability  فهو واضح من المثال اعلاه اننا استخدما نفس الأجراء لأسترجاع قيم مختلفة عن طريق الID



   2.   Reduces network traffic.
مثل صيني يقول :"الصورة بألف كلمة", الصورتان التاليتان تحددان الفرق :

الصورة الأولى: توضح أرسال جمل الأستعلام Inline Query مايقارب 30 سطر برمجي , مابين المطور او المستخدم مع الSQL Server.

الصورة الثانية: توضح استخدام الأجراء المخزن وكيفية اعادة استخدامه مابين عدة مستخدمين والSQL Server

طبعاً الفرق بين الأثنين من حيث نقل المعلومات!! وبالتالي فهذا يؤثر على اداء الشبكة!! في الصورة الأولى: كم هائل من بيانات جمل الأستعلام ونفس جمل الأستعلام تُنقل من المستخدمين الى الSQL Server  ?!
بينما اذا لاحظت في الصورة الثانية: فقط كلمة Execute  مع اسم الأجراء والقيم الداخلة والخارجة فقط!!
فبهذا نستنتج الأمرين معاً ان الأجراء المخزن يعمل على تقليل مرور البيانات مقارنةً بAdhoc queries, ويطبق مفهوم الReusability حيث كلً من المستخدمين يستخدم نفس الأجراء ولكن قيم المدخلة او المخرجة قد تختلف فقط!


      3.   Code reusability and better maintainability.

مفهوم الReusability  شرح في النقطة الثانية , ولكن سأكرره بشكل مختصر: عدة تطبيقات او مستخدمين يعملون على نفس الشكل العام لأسترجاع البيانات مع فرق القيم المدخلة او المخرجة!
ومن مفهوم الMaintainability : لنفترض اننا لم نستخدم الأجراء المخزن واستمررنا بInline Queries مثل الصورة الأولى في النقطة الثاني حيث عدة مستخدمين يعملون بنفس المنهج لأسترجاع البيانات مع فرق القيم المدخلة او المخرجة, السؤال هو اذا كان منطق استرجاع البيانات قد تغيير حسب سياسية الشركة او المؤسسة! او حصل خطأ برمجي؟!
الجواب: سيكون بمقدورك حلها ولكن بعد عناءاً طويل وجهد كبير ذلك اشبه بكابوس!!!
الجواب المنطقي: استخدام الأجراء المخزن! لماذا لأنه اذا حدث تغيير في منطق استرجاع البيانات حسب سياسية الشركة او المؤسسة! او حصل خطأ برمجي! يمكن حل المشكلة من مكان واحد ولا ضرورة للقفز لكل التطبيقات ومعالجة تلك المشكلة! فقط مكان واحد وحل مثالي J

  4.   Better Security. 

      5.   Avoids SQL Injection attack.
النقطتان مفهومهما واحد وهو الأمن وحماية البيانات, لنأخذ مثال: عدة مستخدمين يعملون على استرجاع البيانات عن طريق الAdhoc queries بدون استخدام الأجراء المخزن! من جدول معين وكان الجدول يحتوي على حقول حساسة لا ينبغي على الكل الوصول لتلك البيانات! فما الحل : طبعاً الأجراء المخزن Stored procedure حيث سنعمل على تطبيق اعطاء صلاحية استخدامها بدون الوصول للجدول اي انها اصبحت كبوابة امنية!
والنقطة الأخيرة: توضح نوع خطير من اختراقات قواعد البيانات وهو الSQL Injection , يحدث هذا النوع من الأختراقات عن انشاء الInline Queries بطريقة تلقائية اي عن طريق النظام, يوجد طريقتان لتفادي ذلك اما كتابة الAdhoc queries مع فحص كل قيمة مدخلة! او عن طريق استخدام الأجراء المخزن 

Comments

Popular posts from this blog

PART #2: Registration and Login System Tutorial Using PHP and MYSQL

PART #2: Registration and Login System Tutorial Using PHP and MYSQL Registration and login system using PHP and MySQL database, in this part you will do the following: 1- Creating the registration page. 2- Validating the registration form. 3- Sending the activation link on successful registration. note: you can find the mailserver tool here: [MailServerTool] Good luck. PHP,Mysql,Programming,web development,How to,Technology,web programming,web project ideas,safaa al-hayali,saf3al2a,Registration and login,Registration and login in php,php and mysql login system,registration system using php and mysql,login and register php,login and register php with database,database,php tutorial,learn php,tutorial

How To Play .srt Subtitles File in Windows Media Player

How To Play .srt Subtitles File in Windows Media Player links: https://sourceforge.net/projects/wmpsub/ wmp,.srt Subtitles File in Windows Media Player,How To Play .srt Subtitles File in Windows Media Player,How To,Safaa Al-Hayali,saf3al2a,srt subtitle in WMP,Windows,Windows Media Player,media,.ass,local subtitles

Virtual Box : How to Increase Disk Size - Windows

How to increase disk size or disk storage in oracle virtual box the command you have to use: vboxmanage.exe modifymedium "[YourPathToVdiFileOfYourVirtualMachine]" --resize [NUMBER] virtual,box,vbox,oracle,partition,size,disk,increase,resize,windows,10,microsoft,vdi,vboxmanage,configuration,Safaa AL-Hayali,saf3al2a,Oracle,VirtualBox,How to,windows 10