`
wangqisen
  • 浏览: 47273 次
文章分类
社区版块
存档分类
最新评论

本月空闲下来的第一篇博文--论证数据库中索引的重要性以及模糊查询的低效率

 
阅读更多

在数据库应用中,建立索引的重要性体现在何处?做一个课设,一个系统,一个日pv不过百商业网站,需要在数据库中时刻关注并维护索引么?

我的看法是,正如一个成熟的杀手不会用水果刀去捅人,也不会用ak47来杀鸡一样,索引的重要性,只有在数据量达到一定程度,比如十万级,百万级,千万级的时候才会体现出来。试想,如果没有索引,每次查询都要通过全表遍历来实现,这就好比一个男人每次想要见女朋友,却要先依次跟她的妈妈爸爸阿姨姨夫舅舅叔叔乃至三大爷的二侄子的大姑妈打个招呼,估计等到结婚那天,得等到头发都白了。闲言少叙,看我上过程。

我使用了10000条记录来作为测试数据。首先在数据库中插入这一万条记录,代码如下:

<?php
$con=mysql_connect("localhost","root","");
if (!$con){
	die('Could not connect: ' . mysql_error());
}
else 
	echo "success";
mysql_select_db("test2",$con) or die("打开失败");

$tId=1;
$tClassId=10001;
$tStr="abcdefghijklmnopqrstuvwxyz";
$tAge=array(20,21,22,23,24);

$id=$tId;
$classId =$tClassId;

for($j=0;$j<10000;$j++){
	$name="";
	for($i=0;$i<20;$i++){
		$name=$name.$tStr[mt_rand(0,25)];
	}
	
	$email="";
	for($i=0;$i<18;$i++){
		$email=$email.$tStr[mt_rand(0,25)];
	}
	$email=$email."@163.com";
	$age=$tAge[mt_rand(0, 4)];
	$sql2 = "insert into t_test(id,name,classId,email,age) values('$id','$name',$classId,'$email','$age')";
	mysql_query($sql2,$con);
	$id++;
	$classId++;
	}
?>
如果使用zend来执行这个php程序,会因为插入数据太多,栈溢出而程序中断。所以,这里,在命令行中运行该php程序。


几分钟后,数据插入完毕


为了能够查看数据库中运行的进程的运行时间,需将profiling设置为1.而show profiles则为查看进程运行时间的命令



这时,我使用order by语句来查看数据库中的数据:



注意,我没有给id之类的添加任何主键,是为了更好地观察索引的厉害。

查完后,看一下运行时间:


注意,我的语句是最后一条,0.09秒。

这时,我给order by语句的order by对象age创建普通索引:



我再运行一下相同的order by语句,这时再看一下运行时间:



最后一条就是,0.009秒,整整与没有索引的全表遍历查询相差了一百倍!

论证完毕。

下面是论证模糊查询使不得!



look,0.07秒。

这时,我加个普通索引:


再查,再看运行时间:



0.02秒,这个时间已经相当惊人了,如果是百万级的数据,就会造成很大的查询延迟,甚至进而影响其他查询,造成更大的查询延迟。即使在使用了索引的情况下,也很难有多大的优化,因此,模糊查询不是在数据库中进行全文检索的一个适合的方法。可以使用sphinx来对mysql数据库中的数据进行检索。这个我研究研究,再议。

分享到:
评论

相关推荐

    数据库系统原理与开发-文档型数据库-2.pdf

    1 数据库原理及应用 电子科技大学-张凤荔 数据库系统原理与开发 MongoDB数据库的组成 MongoDB的集群架构 【 【本节学习目标 本节学习目标】 】 2 数据库原理及应用 电子科技大学-张凤荔 数据库系统原理与开发 一、...

    达梦数据库常用系统视图及查询语句.pdf

    达梦数据库常⽤系统视图及查询语句 ⼀、常⽤的系统视图: dba_objects:显⽰数据库中所有的对象,例如想查询数据库中有没有某个对象 v$sessions:显⽰会话的具体信息,如执⾏的 sql 语句、主库名、当前会话状态、⽤...

    教室管理系统数据库系统设计

    2.2.1能够存储一定数量的教室信息,并方便有效的进行相应的教室如何分配和管理,这主要包括: ...系统完整性要求系统中数据的正确性以及相容性。可通过建立主、外键,使用check约束,或者通过使用触发器和级联更新。

    sql server常用的服务器数据库状态查询脚本

    dba常用的状态查询脚本等 EXEC sp_who2 exec sp_lock EXEC sp_helpdb dbcc sqlperf(logspace) --查看当前数据库服务器名(xp_getnetname、HOST_NAME()) EXEC master..xp_getnetname --查看服务器上所有Windows...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    SQL(Structured Query Language)结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。同时也是数据库脚本文件的扩展名。  SQL语言主要包含5个部分  数据定义...

    医院数据库管理系统Hospital-Database-Management-System-master.zip

    构建一个医院数据库管理系统,用MySql和Java实现。结果比医院实际需要的要小得多,但同时也比医生要求的要多。 在HDBMS/src/HDBMS Info/下提供了ERD、UML、登录系统的初始凭据,以及可以导入MySql的数据库备份(带有...

    FreeRTOS系列教程高级篇文档资料

    1、 FreeRTOS高级篇1---FreeRTOS列表和列表项.docx 2、FreeRTOS高级篇2---FreeRTOS任务创建分析.docx 3、FreeRTOS高级篇3---FreeRTOS调度器启动过程分析.docx 4、 FreeRTOS高级篇4---FreeRTOS任务切换分析.docx 5、...

    数据库-MySQL-停车场管理系统-.pdf

    数据库设计 数据库管理系统在日常生活中的应用十分广泛,比如停车场管理系统,涉及 到车位划分,车辆进出收费等信息管理,一个好的停车场数据管理系统设计,会 使得停车场管理结构优化,提高服务效率。我们现设计并...

    ORACLE数据库空闲碎片.pdf

    ORACLE数据库空闲碎片.pdf

    数据库课设教室管理系统(jsp+MySQL)

    1、教师查询:学生可以通过查询教师的姓名,了解该老师的开课的相关情况 2、教室查询:学生可以查询相关教学楼相关教室的信息以及该教室在每天任一时段的使用情况,或者有课,或者有讲座、或者有活动等等。这个功能...

    局域网内空闲IP的查询 批处理实现

    局域网内空闲IP的查询 批处理实现。很实用的,查询本机IP和局域网内的IP。

    12_ORCLE数据库管理_示例脚本

    --查看数据文件 select * from v$datafile --通过v$log可以查看日志组,v$logfile可以查看具体的成员文件 select * from v$log select * from v$logfile ...--空闲区查询 select * from dba_free_space

    一个mysql数据库连接类库.zip

    数据库连接是一种有限的昂贵的资源,数据库连接影响到程序的性能指标,数据库连接池正是针对这个问题提出来的,数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新...

    数据库课程设计--教室信息管理系统.doc

    目录 第一章 系统概述 1 1.1 项目开发背景和意义 1 1.2 系统功能分析 1 1.3 系统实现技术 1 第二章 需求分析 2 2.1 需求分析任务 2 2.1.1 处理对象 2 2.1.2 安全性和完整性要求 2 2.2 数据流程分析 2 2.3 数据字典 4...

    c3p0数据库缓冲池配置说明

    c3p0数据库缓冲池配置 a----最大JDBC连接数量,超出这个数量就会抛异常. b----最少JDBC连接数量. c----以秒为单位。如果空闲连接的空闲超过了timeout,就会删除 d----最大的PreparedStatement的数量 e----每隔...

    Android课设-基于Vue的空闲停车场实时查询系统APP源码.zip

    Android课设-基于Vue的空闲停车场实时查询系统APP源码.zipAndroid课设-基于Vue的空闲停车场实时查询系统APP源码.zipAndroid课设-基于Vue的空闲停车场实时查询系统APP源码.zipAndroid课设-基于Vue的空闲停车场实时...

    数据库系统概念:存储和文件结构.pdf

    数据库系统概念:存储和⽂件结构 ⽂章⽬录 1、基本概念 1、内存数据库与磁盘数据库的特征⽐较 内存数据库 内存数据库 磁盘数据库 磁盘数据库 存取时间 s 量级 s 量级 数据存储 不需要连续存储 连续存储 缓冲管理 不...

    空闲端口查询

    空闲端口查询

    神通数据库使用文档.docx

    国产神通数据库创建数据库使用手册,包括创建表空间,用户,导入sql脚本功能的使用说明

    OS磁盘空闲区管理-C语言实现

    选择使用位表、链式空闲区、索引和空闲块列表四种算法之一来管理空闲块。对于基于块的索引分配执行以下步骤:  随机生成2k-10k的文件50个,文件名为1.txt、2.txt、……、50.txt,按照上述算法存储到模拟磁盘中。 ...

Global site tag (gtag.js) - Google Analytics