Index de programmation de base de données Python


Exigences expérimentales

But: Comprendre le rôle de l'index dans la base de données, comprendre l'application de l'index

  1. Test de l'instruction SQL Python
    Veuillez créer deux tables des élèves identiques.
    La table des élèves 1, contient l'ID de la clé primaire (incrémentation automatique, l'ID de l'étudiant), le nom de l'étudiant nane, le score de l'
    étudiant , la table de l'étudiant 2, contient l'ID de la clé primaire (auto-incrémentation, l'ID de l'étudiant) ), Nom de l'étudiant nane, score de l'étudiant
    , veuillez ajouter un index au score du tableau 2

La différence entre l'ajout d'un index et le fait de ne pas ajouter d'index dans les données relationnelles: la
création d'un index pour un champ générera une arborescence autour du champ.
Autrement dit, lors de l'utilisation des conditions où sont: par exemple: où score> 90

  • Sans index: Recherche dans l'ordre ------> O (n)
  • Ajouter un index: double recherche ------> O (log2n)
  1. Méthode ORM de Python pour effectuer le test
    Veuillez utiliser la méthode ORM, insérer les mêmes données dans les deux tables des élèves - 100 000, le nom est généré en utilisant une combinaison aléatoire de caractères chinois et le score est généré aléatoirement de 0 à 100 uniformément distribués.

Pour les étudiants qui effectuent des requêtes sur deux tables en même temps avec un score supérieur à 95, testez si la création d'un index sur le score apportera l'avantage de l'efficacité du temps de recherche.


Premièrement, SQL crée la table des étudiants

1.1 table de création

Affichage du code:

#Python 数据库
import pymysql

db = pymysql.connect(user='test',host='localhost', password='123456',database='testdb',charset='utf8')
cursor = db.cursor() #创建游标  游标的每个动作会执行到数据库里面

sql = """create table student1(
        id int auto_increment primary key,
        name varchar(20) not null,
        score int) """
cursor.execute(sql)
sql = """create table student2(
        id int auto_increment primary key,
        name varchar(20) not null,
        score int) """
cursor.execute(sql)
#添加索引
sql = "create index score_index on student2(score)"
#删除索引
#sql = "creat index score_index on student2()"
cursor.execute(sql)
cursor.close()
db.close()

Affichage des résultats:
Insérez la description de l'image ici

1.2 afficher l'index

SHOW INDEX FROM student1 // Pas d'index

Insérez la description de l'image ici

SHOW INDEX FROM student2 // Ajouter un index

Insérez la description de l'image ici

Deux, façon ORM de créer des données

2.1 Construire des données

Le code clé est le suivant (exemple):

#创建类
class Student1(Base):
    __tablename__ ='student1'#表名-->数据库中表student1

    id = Column(Integer, primary_key=True)
    name = Column(String)
    score = Column(Integer,default=60)#默认60

class Student2(Base):
    __tablename__ ='student2'#表名-->数据库中表student2

    id = Column(Integer, primary_key=True)
    name = Column(String)
.....
.....
.....
for i in range(100):
    #随机生成 两个字的姓名   分数 
    name  = ''.join(random.sample('张王天男别奥法妹大那几年安东尼的技能但是否能单反',2))
    score = random.randint(0,100)
    session.add(Student1(name=name, score=score))
    session.add(Student2(name=name, score=score)) 
    #每调用一次,塞入数据库执行一次    
    session.commit()
    '''
    由于插入数据需要消耗时间 当插入大量数据可作如下改动
    if i%10 == 0
    	session.commit()
    '''
    print(i)

2.2 Requête de données

Le code est le suivant (exemple):

#SqlAlchemy查询建立也需要时间
students = session.query(Student1).filter(Student1.score<50).all()
students = session.query(Student1).filter(Student2.score<50).all()
#SqlAlchemy真实测试的查询
#100条数据,不见索引查询的快
#1000条数据,建立索引查询的快
print(time.clock())
students = session.query(Student1).filter(Student1.score>90).all()
print(time.clock())
students = session.query(Student2).filter(Student2.score>90).all()
print(time.clock())
  • Résumé: la requête d'index convient à de grandes quantités de données

Pour résumer

Insérez la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/HG0724/article/details/112404629
conseillé
Classement