Mysql中MyISAM、InnoDB中count效率的第一次简单测试
数据准备
1、在mysql数据库的一个database中创建表students,设置存储引擎为MyISAM,不设置主键和任何索引
create table students(id int,name varchar(100),age int,address varchar(100)) engine=MyISAM;
2、在mysql数据库的其他database中创建表students,设置存储引擎为INNODB,不设置主键和任何索引
create table students(id int,name varchar(100),age int,address varchar(100)) engine=INNODB;
3、向students表中插入10万条数据(我是用python插入的)
import pymysql
import random
myconnect=pymysql.connect(host="127.0.0.1",
user="root",
password="123456a?",
database="learn")
list_value=[]
list_name=['小明','美美','超级小甜心','我是一个粉刷匠']
list_address=['北京','上海','青岛','成都','哈尔滨']
for id in range(1,1000001):
name=random.choice(list_name)+"_%07d"%id
age=random.randint(18,22)
address=random.choice(list_address)
list_value.append([id,name,age,address])
with myconnect.cursor() as cursor:
sql1="insert into students values(%s,%s,%s,%s)"
cursor.executemany(sql1,list_value)
myconnect.commit()
MyISAM测试
1.1、MyISAM表中,未设置索引时,count(*),count(1),count(column_name)的效率如何,三者有何区别?
count(*):超级快,马上显示结果,是因为MyISAM存储引擎会专门存储表的总行数,所以每次查询时直接将结果显示即可。
count(1):超级快,因为count(1)和count(*)的原理是一样的
count(column_name):很慢,因为要将所有记录扫描一遍才能出结果。
备注:虽然在本例中看上去count(name)也是100000个结果,但如果某一个记录里name有空值的话,count(name)的结果就是99999,要去除空值。而count(*)和count(1)则仍然是100000
1.2、MyISAM表中,未设置索引时,同样是count(*),加入where条件后,查询的效率区别?
加了where语句的查询会变得很慢,因为要全盘扫描。
1.3、MyISAM表中,添加索引后,再进行数据查询
create index index_name on students(name);
然后进行数据查询:
select count(name) form students语句,无索引时使用5.89秒,为name列加了索引后使用0.36秒
select count(*) from students where name like"%小%"语句,无索引时使用5.82秒,为name列加了索引后使用0.49秒
从结果上看,速度还是快了很多。
本次测试仅10万条数据,当数据量更大,到了百万千万级别时候,使用索引后的查询效率就更加明显了。
INNODB测试
2.1、Innodb表中,未设置索引时,count(*),count(1),count(column_name)的效率如何,三者有何区别?
好像没啥太大的区别。
Innodb表不会存储该表的总行数,所以count(*)的话是要全盘扫描。但count(column_name)的速度更快一点,不知道是不是innodb为列加了默认的hash索引?我也不太懂,看过别人的文章大概猜的,这个还待了解。
2.2、Innodb表中,未设置索引时,同样是count(*),加入where条件后,查询的效率区别?
好像没啥太大的区别。有where语句反而更快?
2.3、Innodb表中,为name列添加索引后,再进行数据查询
速度和之前比并没有明显的变化。
关于mysql的索引,后续还需要进一步了解啊,加油吧!
本文地址:https://blog.csdn.net/weixin_45580903/article/details/108998020
上一篇: 笔记本电脑的电池及节能技巧