
首先你要分析出来插入时候慢的原因,
1、磁盘速度慢?
2、表里字段创建的索引过多?
3、表在其他的视图中存在,并且在视图里创建了索引?
4、插入到的表有触发器 或者该数据库有触发器,引起了其他 *** 作?
综上所述,找到原因,解决原因,应该就能很快解决的
若你是SQL SERVER,可以用事件探查器监视一下,在该语句执行时的情况,会有助于你分析问题
不要一行一行insert,这样很慢,用事务批量写入就会快很多
原理:一行行insert数据时,每次insert都相当于一次事务提交,而显式用一个事务批量提交时,只提交一次即可,速度自然就会快很多
(1)创建student表
create table Student(Sno char(9) primary key,
Sname char(20) unique,
Ssex char(2) check(Ssex='男' or Ssex='女'),
Sage smallint,
Sdept char(20)
);
创建course表
create table Course(Cno char(4) primary key,
Cname char(40) unique,
Ccredit smallint,
Csemester char(20)
);
创建成绩表
create table Grade(Sno char(9),
Cno char(4),
Ggrade int,
--主码由Sno和Cno组成
primary key(Sno,Cno),
--表级完整性约束
foreign key(Sno) references Student(Sno),
foreign key(Cno) references Course(Cno)
);
(2)
select Sname,Sagefrom Student
(3)
select Snamefrom student
where sname not like '王%' and sname not like '李%'
(4)
select count()as 选课门数,sum (ggrade)as 总成绩,max(ggrade) as 最高分,min(ggrade) as 最低分,avg(ggrade) as 平均分from grade
where sno='9512101'
(5)
select TOP 3 Sname,Sage,Sdeptfrom student
order by Sage
(6)
insertinto Student(Sno,Sname,Ssex,Sage,Sdept)
values('9521104','陈东','男',18,'信息系')
(7)
update Studentset Sage=Sage+1
(8)
create view V1as
select StudentSno,StudentSname,Ggrade
from Student,Grade
where StudentSno=GradeSno and cno='c01'
1对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
2应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num is null
可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:
select id from t where num=0
3应尽量避免在 where 子句中使用!=或<> *** 作符,否则将引擎放弃使用索引而进行全表扫描。
4应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num=10 or num=20
可以这样查询:
select id from t where num=10
union all
select id from t where num=20
5in 和 not in 也要慎用,否则会导致全表扫描,如:
select id from t where num in(1,2,3)
对于连续的数值,能用 between 就不要用 in 了:
select id from t where num between 1 and 3
6下面的查询也将导致全表扫描:
select id from t where name like '%abc%'
若要提高效率,可以考虑全文检索。
你经常查询的,经常分组的,经常判断的
字段
,必须加
索引
,增加索引后,查询速度会大幅度提高,但是插入,更新,删除速度会变慢,总而言之,总有一个慢,你权衡是数据插入,更新,删除多还是查询多,决定是否增加索引,非经常查询字段就不要增加索引了,以免浪费
数据空间
和增加插入,更新,删除的时间
另外,如果数据按时间增长,由于你使用的是SQL2000,建议将
大表
拆开每日保存一张
日表
,缩小单张表的大小,在表内查询就会快很多(因为读进
内存
的数据小多了),实现分区的功能;如果使用SQL2005,则数据库可以直接支持分区
这样就
没有问题
了,我们这处理的数据每天4000
万行
,保存了50天数据,查询起来也只要5分钟
以上就是关于如何提高sql数据库对插入比较长的字符串的速度全部的内容,包括:如何提高sql数据库对插入比较长的字符串的速度、sql 如何向数据库中写入的速度快、数据库sql语句,速度等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)