mysqlleftjoin会影响数据库性能吗?
只要索引使用得当,简单的left join是不会影响数据库查询性能的,但有几种情况要特殊考虑下:
1. 联表查询涉及到的表超过了3个,最好不要使用join,这是《阿里巴巴Java开发规范》明确说明的。
2. 涉及到分库分表的,也要慎用join(多表join一时爽,垂直拆分火葬场)
在平时的开发中,我一般的做法是能不用join就不用join,能使用Redis和本地缓存的就使用Redis和本地缓存,尽量避免因复杂的SQL运算造成数据库查询性能降低的操作。
数据库的性能不是SQL影响的,你SQL执行的性能取决于SQL写的是否正确,数据库的性能也会影响到你SQL的执行效率,同样的SQL,如果数据库单表500w的数据量,"inodb_buffer_pool_size"大的,在同等条件下肯定效率高,left join会在一定程度上影响,如果一条SQL有太多的left join如果没有很好的索引,那么基本上性能就会很差,关联字段要建立正确的索引,数据库内存再大一点,,一个SQL两三个leftjoin也是可以的,没有多大问题
什么是连表查询?
连表查询即两张表或多张表联合查询,联合查询得到的结果称为笛卡尔积,假设A表中有n条记录,B表表中有m条记录,则它们联合查询得到的笛卡尔积为:n*m
大家可能听过很多种连接方式,比如内连接、外连接、自然连接、交叉连接、左连接以及右连接,但MySQL的连表查询其实只有3种:内连接、外连接、自然连接。 其中内连接等同于交叉连接,而外连接可以分为左外连接(左连接)和右外连接(右连接),仅此而已。
连接查询,就是将两个或更多的表,以某种方式“连接起来”,成为一个整体(表),并作为数据源以供数据查询使用;
连接的方式,大致可以这样一句话描述:
将一个表(A)的每一行,跟另一个表(B)的每一行,两两之间,以“横向对接”(并列)的方式,连接起来,成为一个更长的行,这样得到的所有行所构成的结果数据,就是连接结果(表)