怎么高效率的读满足条件的最新数据
数据库中有几个不断刷新的表,每次读取都只希望读满足条件的记录,比如
给定 表A中,列1中某个值test,需要从表B中读列1=‘test’的记录并且是最新记录(表B中一般满足列1=‘test’条件的最后一条记录为最新记录),如何高效读取,如果使用select * from B where 列1='test' 然后MoveLast()这样查询效率好低,读取数据很慢
因为select其实是对源表中的记录都逐个判断了最后将满足条件的记录存到虚表中,如何能不用每次查询都将整个源表判断一次
[解决办法]
if OBJECT_ID('a') is not null
drop table a
go
create table a(col1 varchar(100))
insert into a
values('test')
insert into a
values('test1')
insert into a
values('test2')
if OBJECT_ID('b') is not null
drop table b
go
--1.新增the_date字段
create table b(col1 varchar(100),the_date datetime)
insert into b
values('test',GETDATE())
waitfor delay '00:00:01' --延时1秒
insert into b
values('test',GETDATE())
waitfor delay '00:00:01'
insert into b
values('test',GETDATE())
waitfor delay '00:00:01'
insert into b
values('test2',GETDATE())
select *
from b
--2.如果表b还有其他很多字段,那么最好建索引
CREATE INDEX idx_b ON b(col1,the_date)
--3.速度非常快
SELECT b.*
FROM a
INNER join
(
select
b.col1,
max(the_date) AS the_date --求出最大日期
from b
GROUP BY b.col1
)b1
ON a.col1 = b1.col1
INNER JOIN b
ON b.col1 = b1.col1
AND b.the_date = b1.the_date