mysql 单表多次查询和多表联合查询,哪个效率高
1. mysql表设计合理且有设置缓存和索引等的话,肯定是比自己程序去逐表查取更简洁,高效。专业的事情让专业的工具去做,关系库就是干这个的。
2. 不过不建议3表以上的连接查询(可优化表设计,简化业务逻辑和使用程序分步解析数据),sql复杂代码不易维护,且大数据量带来麻烦时,要考虑分库分表或使用分布式框架
1. 多表连接类型
1. 笛卡尔积(交叉连接) 在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用',' 如:
?
1
2
3
SELECT * FROM table1 CROSS JOIN table2
SELECT * FROM table1 JOIN table2
SELECT * FROM table1,table2
由于其返回的结果为被连接的两个数据表的乘积,因此当有WHERE, ON或USING条件的时候一般不建议使用,因为当数据表项目太多的时候,会非常慢。一般使用LEFT [OUTER] JOIN或者RIGHT [OUTER] JOIN
2. 内连接INNER JOIN 在MySQL中把INNER JOIN叫做等值连接,即需要指定等值连接条件在MySQL中CROSS和INNER JOIN被划分在一起。 join_table: table_reference [INNER | CROSS] JOIN table_factor [join_condition]
3. MySQL中的外连接,分为左外连接和右连接,即除了返回符合连接条件的结果之外,还要返回左表(左连接)或者右表(右连接)中不符合连接条件的结果,相对应的使用NULL对应。
二话不说,直接上图,引自高性能MySQL
SELECT b.id FROM t_address a, t_unit b WHERE b.utj=1 AND b.ufreeze=2 AND a.id=b.uads and a.sid=3
就这个啦!!
原因很简单
b.utj=1不满足的话,那么系统就直接找下一个数据
用的in的话,如果第一个不满足,那么就匹配第二个,第二个不满足,在匹配第三个
,全部不匹配 才找下一条数据!!
这个就可以看到了,可能用IN的话,效率可能会减慢3倍,打个比方
贾帝心达: 1. mysql表设计合理且有设置缓存和索引等的话,肯定是比自己程序去逐表查取更简洁,高效.专业的事情让专业的工具去做,关系库就是干这个的. 2. 不过不建议3表以上的连接查询(可优化表设计,简化业务逻辑和使用程序分步解析数据),sql复杂代码不易维护,且大数据量带来麻烦时,要考虑分库分表或使用分布式框架
班戈县13223746739: mysql用到多表查询时 是一次关联多张表好 还是分多次查询合适 - ?
贾帝心达: 如果数据多的话,关联查询比较慢,尽可能的一个表一个表查询,然后用程序处理逻辑
班戈县13223746739: “mysql ”多表联合查询语句怎么写? - ?
贾帝心达: 一使用SELECT子句进行多表查询SELECT 字段名 FROM 表1,表2 … WHERE 表1字段 = 表2字段 AND 其它查询条件SELECT a.id,a.name,a.address,a.date,b.math,b.english,b.chinese FROM tb_demo065_tel AS b,tb_demo065 AS a WHERE a....
班戈县13223746739: mysql多表联合查询与分开查询哪个更好 - ?
贾帝心达: 多表联合查询快,单表查的话需要多次连接数据库,耗时都在连接的过程
班戈县13223746739: mysql怎么将两个表查询出来的结果再去关联下一张表? - ?
贾帝心达: 可以用两表的查询(为其取一个表别名),然后再用该虚拟表与另一张表实施连接查询即可.请参考以下例子: 假设有三张表 1)商品表(商品ID,商品名称) 2)入库表(商品ID,入库数量,入库时间) 3)出库表(商品ID,出库数量,出库...
班戈县13223746739: MYSQL数据库中三个数据表如何实现关联 - ?
贾帝心达: 数据库多表关联,一般采用外键比较方便,也可以额外建一个连接表做多表关联的连接,但这样稍微有点儿复杂,这些是建表方面的关联.查询关联,可以采用多表查询的方式关联查询,这点要求稍高点儿,但关联后再操作单表时,别的表不用受太大的影响,这点特好.
班戈县13223746739: SQL多表联合查询怎么写? - ?
贾帝心达: 有几种方式可以实现你的这个需求.1. 使用表 关联 SELECT * FROM 表2 JOIN 表1 ON ( 表2.ID = 表1.列1 );2. 使用 IN SELECT * FROM 表2 WHERE ID IN ( SELECT 列1 FROM 表1);3.使用 EXISTS SELECT * FROM 表2 WHERE EXISTS ( SELECT 1 FROM 表1 WHERE 表2.ID = 表1.列1 );
班戈县13223746739: mysql 多个表的信息怎么联合查询的 - ?
贾帝心达: 内联接:select * from a inner join b on a.field_name=b.field_name; 左联接:select * from a left join b on a.field_name=b.field_name; 右联接:select * from a right join b on a.field_name=b.field_name; 建立外键(有2种方法0:1、建表时指定 ...
班戈县13223746739: mysql中用多表UNION查询和一个表查询 哪个更好 - ?
贾帝心达: 用临时表查询,把你需要的东西都放在临时表里面,在查询临时表,这样速度很快
班戈县13223746739: Mysql数据库多表联合查询有几种方法??
贾帝心达: select * from table1 t1,table2 t2 where t1.id=t2.id 这样就是联合查询啊 left join right join inner join 详细的看操作手册啊