Índice de programação de banco de dados Python


Requisitos experimentais

Propósito: Para entender a função do índice no banco de dados, para entender a aplicação do índice

  1. Python SQL statement test
    Por favor, crie duas tabelas de aluno idênticas.
    Tabela de aluno 1, contém ID da chave primária (incremento automático, id do aluno), nome do aluno nane, pontuação do
    aluno , tabela do aluno 2, contém ID da chave primária (incremento automático, id do aluno ), Nome do aluno nane, pontuação do aluno
    , adicione o índice à pontuação da tabela 2 do aluno

A diferença entre adicionar um índice e não adicionar um índice em dados relacionais:
criar um índice para um campo irá gerar uma estrutura em árvore sobre o campo.
Isto é, ao usar as condições where: por exemplo: onde pontuação> 90

  • Sem índice: Pesquisa em ordem ------> O (n)
  • Adicionar índice: pesquisa dupla ------> O (log2n)
  1. Método ORM do Python para realizar o teste
    Por favor, use o método ORM, insira os mesmos dados nas duas tabelas do aluno - 100.000, o nome é gerado usando uma combinação aleatória de caracteres chineses e a pontuação é gerada aleatoriamente de 0-100 uniformemente distribuída.

Para alunos que realizam consultas em duas tabelas ao mesmo tempo com uma pontuação superior a 95, teste se a criação de um índice na pontuação trará a vantagem de eficiência do tempo de pesquisa


Um, SQL criar tabela de alunos

1.1 mesa de criação

Exibição de código:

#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()

Exibição do resultado:
Insira a descrição da imagem aqui

1,2 mostrar índice

MOSTRAR ÍNDICE DO aluno1 // Sem índice

Insira a descrição da imagem aqui

MOSTRAR ÍNDICE DO aluno2 // Adicionar índice

Insira a descrição da imagem aqui

Dois, forma ORM de criar dados

2.1 Dados de construção

O código da chave é o seguinte (exemplo):

#创建类
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 Dados de consulta

O código é o seguinte (exemplo):

#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())
  • Resumo: a consulta de índice é adequada para grandes quantidades de dados

Resumindo

Insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/HG0724/article/details/112404629
Recomendado
Clasificación