DECLARE @mid INT= 429; DECLARE @mi_phone VARCHAR(50)= '18505959580'; --第一种 SELECT * FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY mi.mi_id DESC ) row , mi.mi_id , mi_name FROM m_memberinfo mi WHERE mi.mid = @mid AND mi_phone = @mi_phone ) Tbl WHERE row BETWEEN 1 AND 15; --第二种 SELECT * FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY mi.mi_id DESC ) row , mi.mi_id , mi_name FROM m_memberinfo mi WHERE mi.mid = @mid AND mi_phone = '18505959580' ) Tbl WHERE row BETWEEN 1 AND 15;
第一种执行非常慢,第二种执行很快
在我们所使用的SqlServer工具是微软推出的,当您使用带有传参类型的函数语句时就类似于面向对象的编程方式。直接放入参数执行语句就相当于将原来的字符串拉长插入参数,相当于直接作用于您所执行的函数对象。而声明的时候是提前为数据分配了内存空间,多了一个为参数查找地址的过程。
如果对我的回答满意,请采纳,谢谢
这个明白,但是并不是引起这个查询慢的原因
你看下库里面mi_phone是什么类型的是VARCHAR还是n的
都是VARCHAR类型没错
在查询最后加下OPTION (RECOMPILE)。