ما هي مفاضلات إعادة استخدام المؤشر مقابل إنشاء مؤشر جديد؟

StackOverflow https://stackoverflow.com/questions/2035212

سؤال

في 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 حوله أو مؤشر تم إنشاؤه على هذا الاتصال.

كل ما يجعل الكود الخاص بك أكثر قابلية للقراءة وأسهل للحفاظ على ما سأذهب إليه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top