两个表
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仅仅用来加快速度,实在是不符合业务逻辑,没别的什么用)
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仅仅用来加快速度,实在是不符合业务逻辑,没别的什么用)
解决方案 »
- 求mysql SQL的索引优化使用.
- 请教一个MYSQL字段类型问题
- 请求各位高人,postgreSQL 中 to_number()函数用法
- 安装了5.1xxxx版本的mysql,在安装别的包的时候需要用到libmysqlclient.so.15 怎么办呢?
- Data truncation 错误,请帮忙!
- PostgreSQL 参考手册
- mysql语句问题 union all ?
- Mysql 登录密码正确不能进入mysql
- 设置主从服务器为什么出错啊?求解!
- 新手诚心请教,从php post过来的值写入数据库,如果值相同,能不能在表格中自动计数?
- mysql数据到处问题
- 这句oracle的查询如何改写成postgreSQL
不知道是否有帮助另外,什么数据库支持这种跨表索引呢? 同级别的有什么替代产品吗?