日期:2014-05-17  浏览次数:20763 次

存储过程,取出一个表的数据。另外一个查询语句频繁去匹配前一个表的id找其他值
比如 学生表
Student( 
   int id,
   varchar(20) name,
   int gradeId,
   varchar(20) gradeName
    )
班级表
Grade(
 int id,
 varchar(20) name

班级有十几20条数据。
现有几万条学生数据需要插入到学生表。
写一个存储过程
班级名字每次都去查那张表在写进去么。
有什么节省点的方法么。
T_Sql 存储过程 优化

------解决方案--------------------
1.我觉得学生表里面可以不存gradeName(班级名称)
2.如果一定要存的话,可以用join的方式插入学生数据


insert into Student
select a.id,a.name,b.id as gradeId
,b.name as gradeName
from 来源表 a 
join 班级表 b
on a.gradeId=b.id

------解决方案--------------------
1 不存gradename
2 幾萬個是怎麼一種格式呢?
------解决方案--------------------
引用:
Quote: 引用:

1.我觉得学生表里面可以不存gradeName(班级名称)
2.如果一定要存的话,可以用join的方式插入学生数据


insert into Student
select a.id,a.name,b.id as gradeId
,b.name as gradeName
from 来源表 a 
join 班级表 b
on a.gradeId=b.id



好吧!!!我2了。这个都没想到。
然后
我的那个表其实有好多个这样的有id没name的字段。每个都用inner join 这种。
然后存储过程传参。怎么传那几万个学生进去啊。。。

你那几万个学生存在什么地方呢?
不用一个一个出来吧。
像我上面那个sql,批量出来所有的会快一点
------解决方案--------------------
引用:
Quote: 引用:

插敘出來直接insert 不就得了?

insert into student(a,b,c,d,e,f) values(select * from b)
这样?


看你一次查詢出來多少了,批量一般1000提交一次比較快