2017-06-28 4 views
0

La question est lors de l'interrogation de ma base de données en utilisant pyodbc cela peut prendre environ une minute pour retourner mes données. Cette table dans ma base de données tourne autour d'un million + lignes. Comment puis-je accélérer cela? J'ai essayé de définir des valeurs pour les colonnes principales dans la table et il est toujours lent. J'ai également essayé de limiter les données retournées en vain. Y a-t-il quelque chose d'autre qui soit plus rapide ou est-ce que je peux éventuellement changer quelque chose pour rendre les choses plus rapides? Toute aide serait grandement appréciée!Pyodbc lente sur la table avec un million + lignes

Voici mon code:

import pyodbc 

conn = pyodbc.connect(r'DSN=mydb;UID=myuserid;PWD=mypass') 

class Visual(object): 

    def get_resource_ids(self, *xargs): 
    resource_ids = [] 
    cur = conn.cursor() 
    cur.execute("select * from operation where status = 'C' and workorder_type = 'W' and workorder_base_id = ? and workorder_lot_id = ? and workorder_split_id = ? and workorder_sub_id = ? and rownum <= 10", xargs[0], xargs[1], xargs[2], xargs[3]) 
    try: 
     return [dict(count=str(index), resource_id=row[6]) for index, row in enumerate(cur, 1)] 

    except ValueError: 
     print "Error" 
    finally:  
     cur.close() 
     conn.close() 
+0

Lorsque vous dites "J'ai également essayé de limiter les données renvoyées", voulez-vous dire que vous avez essayé de récupérer uniquement la/les colonne (s) d'intérêt au lieu de sélectionner "select *"? –

+0

C'est ce que je fais pour limiter les données retournées "rownum <= 10" @GordThompson –

+0

Si une requête avec 'rownum <= 10' prend aussi longtemps qu'une requête sans cette contrainte alors la colonne" rownum "n'est apparemment pas indexé. Est-ce que "opération" est une table ou une vue? Est-ce que "rownum" est une colonne réelle ou une colonne dérivée? La table sous-jacente a-t-elle des index sur toutes les colonnes incluses dans la clause WHERE? –

Répondre

0

essentiellement due à la conception pauvre table c'était auto-infligé pas un problème pyodbc. Moral de l'histoire de concevoir des tableaux mieux.