MySQL连接两个表的ID实现数据关联和查询mysql两表id连接

2 02 2 年,我在某个城市。
当时我在一家公司做数据库管理。
公司有一个项目,需要连接两个表来获取数据。
一张表是客户信息表,一张表是订单表。
客户信息表中有一个 ID 字段,订单表中也有一个客户 ID 字段。
这两个领域是相关的。

当时我很困惑,不知道如何操作。
后来查资料发现MySQL可以通过inner join和outer join实现两个表的ID连接。
内连接查找两个表共有的数据,而外连接查找左表或右表中的数据,即使右表或左表中没有匹配的数据。

我写了一个内部请求。
代码如下: SELECT a.id, a.name, b.phone FROMcustomers AS INNER JOIN contact AS b ON a.id = b.customerid;此查询返回客户信息及其电话号码,因为两个表的 ID 匹配。

然后我写了一个左外增量查询。
代码如下: SELECT customer.id, customer.name,orders.orderid FROMcustomers LEFT JOINordersONcustomers.id=orders.customerid;此查询返回所有客户的信息。
即使他们没有任何命令,它也会出现。
订单号为零。

通过这些问题我解决了项目中的问题。
也许我有偏见,但我认为这些基本的连接方法在MySQL中非常重要,值得深入学习。

查询效率提升10倍!3种优化方案,帮你解决MySQL深分页问题

嘿,你提到了MySQL中的这个分页查询,这让我头晕目眩,尤其是深度分页,这简直就是性能杀手。
不过,我最近一直在考虑一些优化计划,我将与您讨论一下:
上周,一位客户向我询问了这件事,他的电子商务网站用户因页面滞后而被骂。
我为此尝试了几个计划,结果非常好。

第一类是嵌套子查询。
想一想,深度分页就是每次从第一页或者上一页开始扫描整个表,这是非常愚蠢的。
这种方法是先用子查询过滤当前页需要的主键,比如SELECT ID FROM Table WHERE LIMIT条件offset、count;然后利用这些主键去查看原表中的详细数据。
这样就无需每次都返回表检查整个记录。
我上次试过了。
在一个有数百万条记录的表中,一开始支付速度非常慢。
进行此更改后,执行时间减少了一半以上,性能提高了 3 倍,这确实很显着。

第二种是与内连接相关的查询。
这个想法类似于插入子查询,但使用 INTERNET JOIN 将子查询的结果链接到原始表。
例如 SELECT FROM table AS t INNER JOIN(SELECT id FROM table WHERE LIMIT 条件 offset, count) AS sub ON t.id = sub.id;这样也可以避免表递归,性能与嵌套子查询类似,是一种非常有效的优化。
这种方式特别适合需要链接其他表的复杂查询场景。

第三种,页面光标。
这种方法用在新闻APP的信息流中效果最好。
原理是存储上一页的最后一个id,并使用WHERE id > last_id来搜索下一页。
这样,每当是增量查询时,执行时间几乎为0。
我去年在上海做的一个项目,有几千万条新闻文章。
通过这种方式进行分页,用户在滚动时不会感到任何滞后。
但缺点是不能直接抛出这个到指定页面。
比如用户想看第1 00页,就得从第一页滑动到第1 00页,这不适合需要精确页面跳转的场景。

一般来说这三种方法可以解决深层页面的性能问题。
关键在于你如何使用它。
换行子查询和内连接适合大多数需要表查询的场景,而页面游标特别适合滚动加载列表。
如果你能根据自己的业务场景选择正确的方法,性能的提升一定是显而易见的。
不过,这取决于你的表大小、索引条件等。
你必须多尝试才能知道哪一个更合适。
无论如何,这取决于你。