数据库索引

以前没用过索引,没能体会索引的好处,前阵子要处理几百万条记录的表,比如说两边查询,记录多了,查询的速度那是相当的慢,所以就试着用了索引,发现速度提升那可不是一点点,而是很多很多点。

具体操作如下:

一、首先创建两张表,如下图所示:


建表语句如下

CREATE TABLE `t1` (
  `ID` bigint(20) NOT NULL AUTO_INCREMENT,
  `Num` int(11) NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

表二和表一类似创建

二、往两表中填充数据,用存储过程实现,步骤如下:




以上是用navicat创建存储过程的界面,创建两个存储过程,分别网t1、t2中填充数据,代码分别如下:

填充t1的存储过程

BEGIN
	#Routine body goes here...
 	declare n int;
	set n = 1;
	while n <= 50000
	do
		insert into t1(Num) 	values(n);
		set n = n + 1;
	end while;
END
填充t2的存储过程

BEGIN
	#Routine body goes here...
	declare n int;
	set n = 1;
	while n <= 25000
	do
		insert into t2(Num) 	values(n);
		set n = n + 1;
	end while;
	
  	set n = 1;
	while n <= 25000
	do
		insert into t2(Num) 	values(0);
		set n = n + 1;
	end while;
END

三、进行联表查询

求两表中,Num字段相同的行数,查询语句如下:

 select count(*) from t1,t2 where t1.Num = t2.Num;
t1的每一行都要和t2的每一行进行比较,也就是说t2要被从头到尾扫描50000次,如果数据再大点,再有耐心的人都等不下去了,所以必须想想办法,这里就可以用到索引了。创建索引的好处我在这里就不说了,只说一下如何用索引。

其实很简单,其他都不用变,只需在查询之前多做两件事:

第一、为t1创建索引;

第二、为t2创建索引;

创建索引的语句是:

create index Num_i1 on t1(Num); 
create index Num_i2 on t2(Num); 
然后在执行一样的查询语句,没加索引在我电脑上跑要几分钟,加了索引之后,一眨眼的功夫就出结果了。

所以如果当数据量大的时候,一定记得用索引,如果有多个过滤条件,也可以对多个列进行索引。比如create index Num_i1 on t1(ID,Num); 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值