建表语言(SQLSERVEL数据库):create table [A] 

[ID] int IDENTITY (1,1) PRIMARY KEY , 
[NAME] nVarChar(50) , 
[SEX] nVarChar(50) , 
)
A表上建立索引CREATE INDEX name
ON A (name)
插入:INSERT INTO A VALUES多条('ASD','1')和少量('QWE','1')
查询语句:select * from A WHERE NAME LIKE REVERSE('EW%')
是否比select * from A WHERE NAME LIKE '%WE'
的效率高???

解决方案 »

  1.   

    LIKE REVERSE 理论上来说应该效率更低,
    这两个语句最后查询的应该都是 LIKE '%WE' , 都不会用到索引。
    但是第一条查询数据会多一个reverse的步骤,理论上来说会更慢
      

  2.   

    REVERSE('EW%') 的结果是  '%WE', 也就是你两个查询的条件是完全一样的,也就是你实际执行的语句完全一样,这哪来的性能差异?
      

  3.   

    你可以在 set statistics profile on; 的情况下执行,对比两者的执行计划,可以明确看到没区别select * from A WHERE NAME LIKE REVERSE('EW%')
      |--Clustered Index Scan(OBJECT:([master].[dbo].[A].[PK__A__3214EC27716E3CF7]), WHERE:([master].[dbo].[A].[NAME] like N'%WE'))select * from A WHERE NAME LIKE '%WE'
      |--Clustered Index Scan(OBJECT:([master].[dbo].[A].[PK__A__3214EC27716E3CF7]), WHERE:([master].[dbo].[A].[NAME] like N'%WE'))
      

  4.   

    用explain
      

  5.   

    感谢大家的回复,我意识到我语句写错了  查询语句应该是select * from A WHERE REVERSE(NAME )LIKE 'EW%'
    这样的效率在数据内容多的时候  应该效率高,不晓得是不是哈