两个表
emp(person_id, time) 
sec(sec_id, sec_name, person_id) //一个员工可能供职于多个部门,所以要这么设计SELECT emp.person_id, sec.sec_id, emp.time FROM emp INNER JOIN sec USING(person_id) WHERE sec.sec_id = 2 ORDER BY emp.time DESC LIMIT 0, 10;本语句旨在列出第二部门中资历最新的10个人,加以降薪!如果在sec表中加上time字段,如:sec(sec_id, sec_name, person_id, time),并建立emp(sec_id, time) 上的索引,可以用以下语句在第一时间中筛选出根据时间顺序排序的结果:
SELECT emp.person_id, sec.sec_id, emp.time FROM emp INNER JOIN sec USING(person_id) WHERE sec.sec_id = 2 ORDER BY sec.time DESC LIMIT 0, 10;但如此的话,不符合范式,造成冗余!我想,mysql有没有机制能够建立 (sec.sec_id, emp.time)的索引并映射sec表,从而加快检索效率?(从而避免不用在sec中增加字段,增加一个time仅仅用来加快速度,实在是不符合业务逻辑,没别的什么用)

解决方案 »

  1.   

    MySQL中不能建立这种跨表的索引,也不能基于视图做索引。所有没有办法。在设计中首先要尽量符合3NF,BCNF,然后为了加快查询的效率,有时会添加一些冗余字段。
      

  2.   

    哦 刚刚看到一个外键的概念 http://hyj-dx.javaeye.com/blog/260872
    不知道是否有帮助另外,什么数据库支持这种跨表索引呢? 同级别的有什么替代产品吗?