为了研究性能,所以必须先引入大量的数据,基数据为1600多个,现在执行insert into xn_profile (select * from xn_profile)来不断增加数据。
其时间分别为0.11sec,0.27sec,0.35sec,0.39sec,1.6sec,3.45sec,7.38sec,27.41sec,46.72sec,99.66sec,大概是线性变化,但是不稳定,尤其7.38到27.41。
在437216的基数上查询
select count(*) from xn_profile where university="南京大学";
时间为2.27秒,但是再次查询相同的却用了0秒。
随后在university上建立了索引。
create index university_index on xn_profile(university);
花了44.93秒。
再次执行相同的查询
select count(*) from xn_profile where university="南京大学";
花了0.06秒
随后
select count(*) from xn_profile where university="清华大学"
,清华大学比南京大学少得多得多(大概1/100),也只用了0.05秒。
select count(*) from xn_profile where province="江苏";
在没有索引的情况下用了2.9秒,查了江西,也是2.79秒。
再去掉索引,花了27.94秒。
随后将基数上升到1730000,原数据的4倍
select count(*) from xn_profile where university="东南大学";
用了11.16秒,差不多是2.27秒的4倍,符合顺序查找的规律。
select count(*) from xn_profile;
也用了11.79秒。
此时再次建立索引用了223秒。
然后执行相同的
select count(*) from xn_profile where university="清华大学"
,用了0.13秒,查东南大学用了0.42秒,查南京大学2.03秒。
再增加一倍的数据,356秒(包括创建额外索引的时间),这个时间也不知道是应该怎么看
才好。
基数达到3475000
再
select count(*) from xn_profile;
用了52.67秒,这个比是11.26秒的5倍,搞不懂了,怎么会增长这么快?
select count(1) from xn_profile where university="东南大学";
只用了0.83秒
select count(1) from xn_profile where university="南京大学";
用了4.33秒
我插了一条数据,
insert into xn_profile(university) values("test");
再
select count(1) from xn_profile where university="test";
用了0秒,快得一比。
mysql在不同的连接时也会缓存查询结果。
此时,备份该表,用了将近2分钟。数据量达820兆,当然都是sql语句,不敢打开。
结论1、在插入insert操作时时间随插入量大致是线性变化的。
结论2、mysql会把之前查询到的结果缓存,可以跨连接缓存。
结论3、影响索引查询的主要因素取决于数据量的多少,在数据量整体都不是很大时看不出来,但是数据量很大很大时,就明显了。貌似是根号关系,即数据量增加x的平方倍,时间增加x倍。
结论4、在顺序查找(无索引的情况下)时,查询时间主要受查询时间的影响而非io传输的影响。
结论5、我认为顺序查询主要受查询时间的影响。而索引查询主要受io数据传输的影响。
分享到:
相关推荐
mysql索引导出删除
MyBatis+mysql查询和添加数据
mysql添加索引
MySQL查询优化技术_索引
MySQL数据库的创建、查看、删除、使用命令。 表结构创建和修改、表约束的创建和修改; 表数据的插入、删除和修改; 表联系的创建和修改。
MySQL唯一索引重复插入数据解决方案总结.docx
如果查询语句使用索引(通常是where条件匹配索引)就会利用树的结构加快查找,索引会按值查找到要查找的行在表中位置,不需回表查询数据的就是聚簇索引(索引和数据存放在一起)。通常是需要回表再查数据,需要消耗...
MySQL Innodb 索引原理详解
现本着学习的目的,将c#访问操作MySQL数据库进行添加、删除、修改、显示等操作进行梳理。以Visual Studio 2012平台下的示例形式写下来,供以后查看。 一、新建一个Windows 窗体应用程序Test。 如下图所示: 二、...
MySQL索引的数据结构与算法.pptx
Mysql索引数据结构.pptx
MySQL索引 聚集索引 如果你想了解MySQL索引查询优化,你首先应该对MySQL数据组织结构、B-Tree索引、聚集索引,次要索引有一定的了解,才能够更好地理解MySQL查询优化行为。这里主要探讨MySQL InnoDB的聚集索引。
在关系数据库中,索引是一种单独对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。 索引的作用相当于图书的目录,可以...
MySQL索引背后的数据结构及算法原理,技术面试重要内容呀
数据索引 索引概述 课程目标 了解 ——索引的分类。 理解 ——索引的概念及作用; 索引概述 索引的概念 索引是一个单独的、物理的数据库结构,是某个表中一列或者若干列的集合以及相应的标识这些值所在的数据页的...
现本着学习的目的,将c#访问操作MySQL数据库进行添加、删除、修改、显示等操作进行梳理。形成代码,以Visual Studio 2012平台下的示例形式写下来,供以后查看。同时实现了数据库查询,BindingSource绑定控件、...
mysql查询,通过explain 分析,没有利用到索引,查询效率不高等出现的问题。
基于SSM框架+JSP+Ajax请求 mysql数据 关于员工信息的新增+修改+查询+删除基于SSM框架+JSP+Ajax请求 mysql数据 关于员工信息的新增+修改+查询+删除基于SSM框架+JSP+Ajax请求 mysql数据 关于员工信息的新增+修改+查询+...