ما هي مفاضلات إعادة استخدام المؤشر مقابل إنشاء مؤشر جديد؟
سؤال
في cx_oracle (أو Oracle بشكل عام)، هل من الممكن تخصيص مؤشر لكل استعلام، أو لإعادة استخدام المؤشر عبر العديد من الاستفسارات.
def getSomeData(curs): # case 1: pass in a cursor, which is generally
curs.execute('select ...') # reused across queries
return curs.fetchall()
def getSomeData(conn): # case 2: pass in a connection,allocate
curs=conn.cursor() # a cursor for this query
curs.execute('select ...')
return curs.fetchall()
بالطبع، كلا النهجين عودة نفس البيانات.
ما هي المقاضات بين النهجين؟ هو واحد بشكل خاص أكثر أو أقل كفاءة؟ هل هناك أي مطبوعات محتملة لإعادة استخدام المؤشر على العديد من الاستفسارات؟
المحلول
يمكنك إعادة استخدام مؤشر CX_ORACLE بقدر ما تريد، لا مشكلة. إذا كنت تنفذ الآلاف من الاستفسارات الصغيرة في مساحة صغيرة من الوقت، فأنت بذلك ربما راجع تحسين أداء طفيف بإعادة استخدام المؤشر، لكنني أشك في ذلك.
سأقوم في بعض الأحيان بإنشاء مؤشرات جديدة، وأوقات أخرى إعادة استخدام واحدة موجودة، اعتمادا على ما إذا كان يجعل التعليمات البرمجية أسهل في القراءة وفهمها.
على سبيل المثال، إذا كان لدي مجموعة متنوعة من الإجراءات التي تحتاج إلى الوصول إلى قاعدة البيانات، فقد اجتياز كائن اتصال Oracle حوله أو مؤشر تم إنشاؤه على هذا الاتصال.
كل ما يجعل الكود الخاص بك أكثر قابلية للقراءة وأسهل للحفاظ على ما سأذهب إليه.