mysql联合查询语句 关联两个不同数据库查询( 二 )


注意:
1、UNION 结果集中的列名总是等于第一个 SELECT 语句中的列名
2、UNION 内部的 SELECT 语句必须拥有相同数量的列 。列也必须拥有相似的数据类型 。同时,每条 SELECT 语句中的列的顺序必须相同
UNION ALL的作用和语法:
默认地,UNION 操作符选取不同的值 。如果允许重复的值,请使用 UNION ALL 。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行 。
五、总结
(1)对于要求全面的结果时,我们需要使用连接操作(LEFT JOIN / RIGHT JOIN / FULL JOIN);
(2)应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:
备注、描述、评论之类的可以设置为 NULL,其他最好不要使用NULL 。
不要以为 NULL 不需要空间,比如:char(100) 型,在字段建立时,空间就固定了,不管是否插入值(NULL也包含在内),都是占用 100个字符的空间的,如果是varchar这样的变长字段,null 不占用空间 。
可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:
select id from t where num = 0
(3)in 和 not in 也要慎用,否则会导致全表扫描,如:
对于连续的数值,能用 between 就不要用 in 了:
很多时候用 exists 代替 in 是一个好的选择:
(4)尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销 。这是因为引擎在处理查询和连 接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了 。
(5)尽量使用表变量来代替临时表 。如果表变量包含大量数据,请注意索引非常有限(只有主键索引) 。
(6)不要以为使用MySQL的一些连接操作对查询有多么大的改善,其实核心是索引