首页 > 编程知识 正文

mysql多表联合查询优化,多表查询和连接查询效率

时间:2023-05-03 09:41:50 阅读:42396 作者:549

1多表连接类型

1 .笛卡儿积(交叉连接)在MySQL中可以是CROSS JOIN,省略作为CROSS的JOIN,或者使用','

例如,select * from table1crossjointable2select * from table1jointable2select * from table 1、table2

由于返回的结果是两个连接的数据表的乘积,因此一般不建议使用WHERE、ON或USING条件,因为数据表中的项太多会导致非常慢。 通常使用左[ outer ]连接或右[ outer ]连接

2 .内连接在INNER JOINMySQL中将INNER JOIN称为等值连接。 也就是说,必须指定等值连接条件。 在MySQL中将CROSS和innerjoin分为一部分。 join _ table 3360 table _ reference [ inner|cross ] jointable _ factor [ join _ condition ]

3. MySQL中的外连接分为左外连接和右连接。 也就是说,除了符合连接条件的结果外,还在左表(左连接)或右表中返回不符合连接条件的结果,并相应地使用NULL感知。

工作原理:

从左表中读取一个,选择所有与on匹配的右表记录(n条)进行连接,形成n条记录)的重复行,例如结果1和结果3 ),

如果右侧没有与on条件匹配的表,则所有连接的字段为null .继续读取下一行。

a. LEFT [OUTER] JOIN :

select column _ name from table1left [ outer ] jointable2on table1. column=table2. column

除了返回符合连接条件的结果外,还必须在左表中显示不符合连接条件的数据列。 请使用空值支持

b. RIGHT [OUTER] JOIN :

select column _ name from table1right [ outer ] jointable2on table1. column=table2. column

RIGHT与LEFT JOIN的相似之处在于,它不仅需要显示符合连接条件的结果,还需要显示右表中不符合连接条件的数据列,并相应地使用空值感知

Tips:

1. on a.c1=b.c1与using(c1 )2. INNER JOIN相同,)逗号在意义上相同

从包含MySQL的表中获取信息时,可以询问您选择了哪个索引。

如果EXPLAIN想要显示MySQL可能正在使用的索引列表中的错误索引,此功能非常有用。

通过指定useindex(key_list ),可以指示MySQL使用可能索引中最合适的索引在表中查找记录行。

使用可选的二选一ignoreindex(key_list ),可以告诉MySQL不使用特定索引。

2表连接约束

添加显示条件WHERE,ON,USING

1. WHERE子句

2. ON 3. USING子句。 如果连接的两个表连接条件的两列具有相同的名称,则可以使用USING

例如SELECT FROM LEFT JOIN USING () )

连接两个额外表的示例:

mysql

SELECT artists.Artist,cds.title,genres.genre

FROM cds

leftjoingenresncds.genre id=genres.genre id

leftjoinartistsoncds.artistid=artists.artistid;

或mysql

SELECT artists.Artist,cds.title,genres.genre

FROM cds

leftjoingenresoncds.genre id=genres.genre id

leftjoinartists-on CDs.artistid=artists.artistid

where(Genres.Genre='pop ';

-------------请参阅

另外,需要注意的是,在MySQL中处理多表查询时,需要根据查询的情况考虑使用哪种连接方式更高效。

1 .交叉连接(笛卡儿)或内连接(inner|cross ) join

2 .注意指定左外连接LEFT [OUTER] JOIN或右外连接RIGHT [OUTER] JOIN连接条件WHERE,ON,USING。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。