A是信息表 B是用户表,A中uid是外键。AB是N对1的关系。假设两个表中数据都非常多。
想select出指定日期下的a.msg和相对应的pw。
就是 select msg,pw from A,B where A.uid=B.uid and A.date='20111103'问题就是:1 如果指定日期是20111103。并且A表中20111103的行比较少。
那么用
select msg,pw from A,B where A.uid=B.uid and A.date='20111103'
这个语句是不是效率低下?
在这种情况下,
先select A.msg,A.uid from A where A.date='20111103'得到A中的uid 。
然后再select pw from B where B.uid=uid得到pw 这种是不是比上面的效率要高?2 如果指定日期是20111103。并且A表中20111103的行比较多。
那么用select msg,pw from A,B where A.uid=B.uid and A.date='20111103'这个语句是不是效率相对较高?
想select出指定日期下的a.msg和相对应的pw。
就是 select msg,pw from A,B where A.uid=B.uid and A.date='20111103'问题就是:1 如果指定日期是20111103。并且A表中20111103的行比较少。
那么用
select msg,pw from A,B where A.uid=B.uid and A.date='20111103'
这个语句是不是效率低下?
在这种情况下,
先select A.msg,A.uid from A where A.date='20111103'得到A中的uid 。
然后再select pw from B where B.uid=uid得到pw 这种是不是比上面的效率要高?2 如果指定日期是20111103。并且A表中20111103的行比较多。
那么用select msg,pw from A,B where A.uid=B.uid and A.date='20111103'这个语句是不是效率相对较高?
解决方案 »
- 求解二表联取法,显示成一个表
- mysql-front 3.2 build:10.6注册码
- mysql用source进行数据导入的问题!
- 在SQLyog中修改数据的问题
- mysql如何合并多个表
- show errors 返回的值有辦法存入變量中嗎? 要如何做?
- java连mysql不用输入用户名和密码的吗????
- 怎么样把外部的*.txt文件导入数据库中的表?
- mysql中有没有distinct类似的方法
- postgresql怎么显示一个月每天的数据
- access for user root@localhost using password: yes
- 用于不同服务器上的数据库之间的连接和存储过程调用的技术叫什么呀?
如果没有索引。MYSQL同样会先where A.date='20111103',然后再根据主键去B表查询
MYSQL本身就会对语句进行优化。
理论上,如果A表数据少,你从A表取出满足条件的编号,再从B表通过IN (,,,,,,)得到对应编号的数据,效率是要高。但考虑到你使程序变得复杂;结果解析变得复杂,现在有两个结果集;A表数据多少也是不定的;你得到效率上稍许的提升,但付出的代价要大得多。一般小表驱动大表,是两个表都有条件过滤的情况下,你通过子查询的方式指定优先处理哪个表。
mysql会优化。比如,很多时候,如果表中数据很少,它并不一定会用索引,而是直接扫描全表。
但是,你这里面,看不出走date索引会效率低下的情况。