数据表:School[学校]
字段:
scId 编号
scName 名称 数据表:Classes[班级]
字段:
clId 编号
clSchoolId 所属学校编号
clName 班级名称 数据表:Students[学生]
字段:
stId 编号
stClassesId 所属班级编号
stName 姓名 要求显示出 学生姓名或班级名字或学校名称里包含有“文”字的学校中按学校编号倒序排序的第5到第10个学校。 数据记录大至有50万+以上,所以对SQL优化的要求很高,作起来头痛死,有知道的兄弟帮帮忙吧。
字段:
scId 编号
scName 名称 数据表:Classes[班级]
字段:
clId 编号
clSchoolId 所属学校编号
clName 班级名称 数据表:Students[学生]
字段:
stId 编号
stClassesId 所属班级编号
stName 姓名 要求显示出 学生姓名或班级名字或学校名称里包含有“文”字的学校中按学校编号倒序排序的第5到第10个学校。 数据记录大至有50万+以上,所以对SQL优化的要求很高,作起来头痛死,有知道的兄弟帮帮忙吧。
解决方案 »
- java 调用C#开发的webservice
- 如何根据gps经纬度,按时间顺序绘制轨迹,谢谢。
- js版本没人解答--简单js解释下
- 求图片上传问题
- GridView分页问题(翻页时不重新绑定数据源)
- GridView模板列中使用函数进行绑定,如何带参数呢?(100分相求)
- |M| 如何能够下载这个视频 急啊。。高手和牛人来看一下
- 紧急~~asp.net的“设计”页面打不开了啊~~
- 自写小函数,怎么private string GetContent <--开始就出错了?
- ASP中使用OleDbDataAdapter的问题
- 问3个问题?外加一个外包有没有人做!
- 速度!关于获得html源码显示的问题!
from AA where clSchoolId
not in(
select top 5 clSchoolId
from ..
where like '%文%'
and clSchoolId )
(
select sc.scId,sc.sName,select row_number()over (order by productname) as rownumber
from School sc inner join Classes cl on sc.scId=cl.clSchoolId
inner join Students st on st.stClassesId=cl.clId
where sc.scName like '%文%' or cl.clName like '%文%' or st.stName like '%文%'
order by scId desc
) as Result
where rownumber between 5 and 10
如果符合条件的记录有10万条的话,会不会先生成一个10万记录的临时表Result,然后再取5-10呢?
呵,老实说,没看懂你写的SQL句..
as
select school .* from school left join Classes on school.scId=clSchoolId left join Students on stClassesId =clId SELECT * FROM (SELECT TOP 5 * FROM (SELECT TOP 10 * from v_schoole ORDER BY scid DESC) AS T ORDER BY scid ASC) AS T1 ORDER BY scid DESC
如果A学校有十个符合条件的记录的话,这句SQL返回的学校将会是十行A学校的记录,而不是十个学校记录
如果符合条件的记录有十万以上的话,估计会运行超时吧...
把语句改成存储过程。可以解决超时问题。不会那么慢的。
(
select sc.scId,sc.sName,select row_number()over (order by productname) as rownumber
from School sc inner join Classes cl on sc.scId=cl.clSchoolId
inner join Students st on st.stClassesId=cl.clId
where sc.scName like '%文%' or cl.clName like '%文%' or st.stName like '%文%'
order by scId desc
) as Result
where rownumber between 5 and 10
row_number()是MSSQL 2005的函数,我的数据库是MSSQL2000。
SELECT a.*,t.* into #tablea from Students a left join
(select * from Classes b left join School c on b.clSchoolId=c.scId )t
on a.stClassesId=t.clId
where charindex('文',a.stName)>0 and charindex('文',t.clName)>0 and charindex('文',t.scName)>0
select top 5 from (select top 10 * from #table order by clSchoolId asc )t order by clSchoolId desc