只有这么多积分,求万能CSDN帮我写一个效率高的sql语句, 百万条记录,分页查询

时间:2021-12-31 23:25:22
有三个表, TP, TG, TD. 我需要查询出 TP.NUM, TP.UNIT,TP.NAME, TG.U和TD.C
分页查询哦
查询的条件是 TP.DATE = '2016-09-20'. AND TG.GYS = 'G306'
这三个表的关联是
TP.DDID = TD.ID  
TD.GYS = TG.GYS
TP.GYS = TG.GYS


我现在用的是not in 效率太低,花了28秒查询出来。555555555555555555555555
求大侠们帮写一个语句。 本人实在是不懂数据库,千万别说太高深的,听不懂。我呢只是完成这个任务,不走数据库路线,所以也不想学太深的东西

6 个解决方案

#1


你要得到大神们来帮助,你总的把你自己的代码贴出来呀 。这样才好帮助你。

#2


尝试在表的条件列建上索引,注:没索引的表

比如:
CREATE INDEX IX_TP_1 ON TP(DATE,DDID,TP);
CREATE INDEX IX_TD_1 ON TD(ID,GYS);
CREATE INDEX IX_TG_1 ON TG(GYS);


not in 改为not exists写法

#3


引用 2 楼 roy_88 的回复:
尝试在表的条件列建上索引,注:没索引的表

比如:
CREATE INDEX IX_TP_1 ON TP(DATE,DDID,TP);
CREATE INDEX IX_TD_1 ON TD(ID,GYS);
CREATE INDEX IX_TG_1 ON TG(GYS);


not in 改为not exists写法


只有这么多积分,求万能CSDN帮我写一个效率高的sql语句, 百万条记录,分页查询

#4


DECLARE @page INT =@PageIndex --当前页
DECLARE @pagingSize INT =@PageSize --一页显示的条数

SELECT * FROM 
(SELECT
    ROW_NUMBER() OVER (ORDER BY  TP.DATE DESC)RN
    ,TP.NUM
    ,TP.UNIT
    ,TP.NAME
    ,TG.U
    ,TD.C
 FROM TP  --主表
 LEFT JOIN  TG ON TP.GYS = TG.GYS
 LEFT JOIN  TD ON TP.DDID = TD.ID
 WHERE TP.DATE = '2016-09-20'. AND TP.GYS = 'G306') t
 WHERE rn BETWEEN (@page-1)*@pagingSize+1 AND @page*@pagingSize


不知道写的对不对

#5


要看你有没有命中索引。

#6


楼主结贴率有点低啊

#1


你要得到大神们来帮助,你总的把你自己的代码贴出来呀 。这样才好帮助你。

#2


尝试在表的条件列建上索引,注:没索引的表

比如:
CREATE INDEX IX_TP_1 ON TP(DATE,DDID,TP);
CREATE INDEX IX_TD_1 ON TD(ID,GYS);
CREATE INDEX IX_TG_1 ON TG(GYS);


not in 改为not exists写法

#3


引用 2 楼 roy_88 的回复:
尝试在表的条件列建上索引,注:没索引的表

比如:
CREATE INDEX IX_TP_1 ON TP(DATE,DDID,TP);
CREATE INDEX IX_TD_1 ON TD(ID,GYS);
CREATE INDEX IX_TG_1 ON TG(GYS);


not in 改为not exists写法


只有这么多积分,求万能CSDN帮我写一个效率高的sql语句, 百万条记录,分页查询

#4


DECLARE @page INT =@PageIndex --当前页
DECLARE @pagingSize INT =@PageSize --一页显示的条数

SELECT * FROM 
(SELECT
    ROW_NUMBER() OVER (ORDER BY  TP.DATE DESC)RN
    ,TP.NUM
    ,TP.UNIT
    ,TP.NAME
    ,TG.U
    ,TD.C
 FROM TP  --主表
 LEFT JOIN  TG ON TP.GYS = TG.GYS
 LEFT JOIN  TD ON TP.DDID = TD.ID
 WHERE TP.DATE = '2016-09-20'. AND TP.GYS = 'G306') t
 WHERE rn BETWEEN (@page-1)*@pagingSize+1 AND @page*@pagingSize


不知道写的对不对

#5


要看你有没有命中索引。

#6


楼主结贴率有点低啊