1.主外键表中,外键表中是否还需要把跟主表有关系的字段设置成索引。比如表A(主表)[Customerid(主键),customername],表B[billno(主键),customerid,billdate........] 表A中的Customerid = 表B中的Customerid,数据库中也设置了此关系。试问这样的话表B中的Customerid还需要设置索引吗?

解决方案 »

  1.   

    我的理解和2楼一样,因为一般查询都是联合表A和表B进行查询,where条件后表A.customerid = 值我想也是用到索引的,不知道这样理解是否正确。
      

  2.   

    B表字段没有建索引,虽然和建了索引的A表关联,但是B还是不会用到索引,因为没有索引,何谈用到
      

  3.   

    3楼的意思就是B表中Customerid也需要建立索引?
      

  4.   


    --查询1:
    SELECT *
    FROM B
    INNER JOIN A
    ON B.customerid = A.customerid
    WHERE B.billdate BETWEEN '20110121' AND '20110121 23:59:59'
    --查询2:
    SELECT *
    FROM B
    INNER JOIN A
    ON B.customerid = A.customerid
    WHERE A.customerid = 'c001' -- 等价于 WHERE B.customerid = 'c001'
    --查询3:
    SELECT *
    FROM B
    INNER JOIN A
    ON B.customerid = A.customerid
    WHERE A.customername = 'Bill Gates'
    这三个查询性质是不一样的。LZ看一下执行计划。对于查询1,B.customerid上有没有索引无所谓,B.billdate上有索引可以提升效率。
    对于查询2和3,B.customerid上最好有索引。
      

  5.   

    外键只是起约束作用,如果用到表A中的Customerid = 表B中的Customerid,不考虑是否频繁的插入修改,只查询的话要用索引的