【实验】MySQL多少数据需要建立索引

【实验】MySQL多少数据需要建立索引

数据准备

采用Python随机生成若干条数据,以备测试使用,代码如下

# db.py
import pymysql
# 默认数据返回的是二维列表:
# (
#     (每一行)
#     (每一行)
# )

# 加上 cursor=pymysql.cursors.DictCursor后的数据返回格式:
# [{'psw': 'e10adc3949ba59abbe56e057f20f883e'}]

class db:
    host = ""
    port = 3306
    user = "root"
    psw = ""
    db_name = "testdb"
    connect = None
    cursor = None
    def __init__(self):
        self.connect = pymysql.connect(host=self.host,port=self.port,user=self.user,passwd=self.psw,db=self.db_name)
        self.cursor = self.connect.cursor(cursor=pymysql.cursors.DictCursor)
        pass

    def query(self,sql):
        connect = pymysql.connect(host=self.host,port=self.port,user=self.user,passwd=self.psw,db=self.db_name)
        cursor = connect.cursor(cursor=pymysql.cursors.DictCursor)
        cursor.execute(sql)
        data = cursor.fetchall()
        connect.close()
        return data

    def operate(self,sql):
        # connect = pymysql.connect(host=self.host,port=self.port,user=self.user,passwd=self.psw,db=self.db_name)
        # cursor = connect.cursor(cursor=pymysql.cursors.DictCursor)
        try:
            self.cursor.execute(sql)
            self.connect.commit()
            self.count = self.cursor.rowcount
            return count
        except Exception as e:
            print(e)
            print(sql)
            return False


import db as db
import random

my_db = db.db()

def get_vcode():
    v_code = chr(random.randint(65,90))
    v_code = v_code + chr(random.randint(97,122))
    v_code = v_code + chr(random.randint(65,90))
    v_code = v_code + chr(random.randint(48,57))
    v_code = v_code + chr(random.randint(65,90))
    v_code = v_code + chr(random.randint(48,57))
    return v_code

if __name__ == '__main__':
    for i in range(1,1000000):
        sql = "INSERT INTO `testdb`.`test_data_100w`(`data_1`, `data_2`, `data_3`) VALUES (%d, '%s', '%s')" % (i+1,get_vcode(),get_vcode())
        my_db.operate(sql)
        print("当前编号:"+str(i))

数据格式

数据表

开始测试

一万条数据

索引前

一万条数据

索引后

在这里插入图片描述
在这里插入图片描述
性能提升0.001秒,可忽略不计~

十万条数据

索引前

在这里插入图片描述

索引后

在这里插入图片描述
速度提升:0.014秒,但是提升了8倍

一百万条数据

索引前

百万条数据

索引后

百万条数据建立索引后
查询速度提升 0.14秒 ,71倍

3000W条数据

3000w

索引前

3000W索引前

索引后

建立索引所用时长:1673.908s 约27分钟!
建立索引所用时长
3000W数据查询时长
速度提升:约4.2秒,1411倍

结论

因为MySQL本身已经非常优秀了,
在几万条数据的情况之下,索引的优势并不明显。
数据达到几十万条以后,索引的效果显著,能明显提升查询速度,数据量越大,索引越发重要。当数据量有了千万级别时,有无索引可导致性能相差千倍!

  • 19
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值