A中有
ID     联系人 
10591  a    
10592  b
10593  c
10594  d
10600  e   B中有
ID     联系方式 
10591  138....
10593  139....
10594  138....
10595  138....
10600  150....select * from a, b where a.id = b.id and b.id like '10459%'得到结果 
ID     联系人 联系方式
10591  a       138...
10593  b       139...
10594  d       138...
可以告诉我有更高效率的.语句么??

解决方案 »

  1.   

    id什么数据类型?
    字符的话在两个表id字段加索引
    数字的话修改语句如下
    select * from a, b where a.id = b.id and b.id between 10590 and 10599
      

  2.   

    你给where后面的字段加索引,你这个使用模糊查询匹配以10459开头的,应该是能走索引的或者你试试charindex('10459',ltrim(b.id))
      

  3.   

    我发现只是执行select * from a, b where a.id = b.id的时候效率都不是很高.
      

  4.   

    900多条数据..只是执行select * from a, b where a.id = b.id就得用5秒左右..不能再快点么??ID我已经加索引了
      

  5.   

    啊..条件就是后面的..charindex('10459',ltrim(b.id)) 但是效率感觉还是不好.
      

  6.   

    你的条件如果用charindex是利用不到索引的
      

  7.   

    select * from a, b where a.id = b.id and b.id >= '10459' and b.id < '10460'
    都已经加索引了.
      

  8.   

    索引改一下
    CREATE NONCLUSTERED INDEX NIX_1 ON A(ID) INCLUDE (联系人)
    CREATE NONCLUSTERED INDEX NIX_2 ON B(ID) INCLUDE (联系方式)语句把*改成ID,联系人,联系方式
    SELECT ID,联系人,联系方式
    FROM A INNER JOIN B ON a.id = b.id and b.id >= '10459' and b.id < '10460'
      

  9.   

    建立索引的话不建议实用charindex,ID聚集索引
      

  10.   

    900多条没索引也不用5秒多啊,没这么夸张吧。
    你的select *出来有几个字段,会不会是显示出来的字段太多了?
      

  11.   

    900多条数据,5秒。
    太厉害了,电脑配置坑爹?
    1G内存的XP普通电脑好像也不用5秒哦。
      

  12.   

    select * from a, b where a.id = b.id and left(b.id,5)= '10459'
    这句可以忽略索引的存与否在对性能的影响。10万数据如果用你的方法大概要2分钟,用这个大概1秒。我用sql server 的示例数据库测过了
      

  13.   

    为了说明,我把代码贴出来,你可以自己弄个示例数据库试试
    1、建表
    USE TempDB
    GO
    CREATE TABLE b1 (blat1 nCHAR(5) NOT NULL)
    CREATE TABLE b2 (blat2 VARCHAR(200) NOT NULL)
    GO
    INSERT b1
    SELECT LEFT(AddressLine1, 5) AS blat1 FROM AdventureWorks.Person.Address
    INSERT b2
    SELECT AddressLine1 AS blat2
    FROM AdventureWorks.Person.Address
    GO
    2、原查询
    SELECT * FROM b1  
    JOIN b2 ON    b2.blat2 LIKE b1.blat1 + '%'
    3、改进后查询
    SELECT *
    FROM b1
    JOIN b2 ON
    LEFT(b2.blat2,5) = b1.blat1
      

  14.   

    为了说明,我把代码贴出来,你可以自己弄个示例数据库试试
    1、建表
    USE TempDB
    GO
    CREATE TABLE b1 (blat1 nCHAR(5) NOT NULL)
    CREATE TABLE b2 (blat2 VARCHAR(200) NOT NULL)
    GO
    INSERT b1
    SELECT LEFT(AddressLine1, 5) AS blat1 FROM AdventureWorks.Person.Address
    INSERT b2
    SELECT AddressLine1 AS blat2
    FROM AdventureWorks.Person.Address
    GO
    2、原查询
    SELECT * FROM b1  
    JOIN b2 ON    b2.blat2 LIKE b1.blat1 + '%'
    3、改进后查询
    SELECT *
    FROM b1
    JOIN b2 ON
    LEFT(b2.blat2,5) = b1.blat1
      

  15.   

    select * from A left join B
    on A.id=B.id where 自己加吧
      

  16.   

    select * from a, b where a.id = b.id and b.id like '10459%'
    与select * from A left join B on A.id=B.id where....两种方式的效率不一样吧.第二种应该快点