在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

mysql中如何使用左链接查询

110次阅读
没有评论

共计 2050 个字符,预计需要花费 6 分钟才能阅读完成。

自动写代码机器人,免费开通

mysql 中如何使用左链接查询,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

我这里所说的主表是指在连接查询里 MySQL 以哪个表为主进行查询。比如说在 MySQL 左连接查询里,一般来说左表就是主表,但这只是经验之谈,很多时候经验主义是靠不住的,为了说明问题,先来个例子,建两个演示用的表 categories 和 posts:

CREATE TABLE IF NOT EXISTS `categories` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(15) NOT NULL, `created` datetime NOT NULL, PRIMARY KEY (`id`), KEY `name` (`name`) ); CREATE TABLE IF NOT EXISTS `posts` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `category_id` int(10) unsigned NOT NULL, `title` varchar(100) NOT NULL, `content` varchar(200) NOT NULL, `created` datetime NOT NULL, PRIMARY KEY (`id`), KEY `category_id` (`category_id`), KEY `created` (`created`), KEY `category_id_created` (`category_id`, `created`) );

先注意一下每个表的索引情况,以后会用到,记得随便插入一点测试数据,不用太多,但怎么也得两行以上,然后执行以下

SQL: EXPLAIN SELECT * FROM posts LEFT JOIN categories ON posts.category_id = categories.id WHERE categories.name LIKE foobar% ORDER BY posts.created DESC

结果如下所示:

table key Extra categories name Using where; Using temporary; Using filesort posts category_id

在 join 查询的 explain 的结果中,第一行表示的表就是主表。所以说在此查询里 categories 是主表,而在我们的经验里,LEFT JOIN 查询里,左表 (posts 表) 才应该是主表,这产生一个根本的矛盾,MySQL 之所以这样处理,是因为在我们的 WHERE 部分,查询条件是按照 categories 表的字段来进行筛选的,且 categories 表刚好存在合适的索引,所以在查询时把 categories 表作为主表更有利于缩小结果集。

那 explain 结果中的 Using temporary; Using filesort 又是为什么呢,为什么 created 或 category_id_created 索引无效呢? 这是因为主表是 categories 表,从表是 posts 表,而我们使用从表的字段去 ORDER BY,这通常不是一个好选择,最好改成主表字段。不过很多时候改不了,那就没招了。

再看一个比较怪异的例子:

EXPLAIN SELECT * FROM posts LEFT JOIN categories ON posts.category_id = categories.id WHERE categories.id =  lsquo; 一个已经存在的 ID rsquo; ORDER BY posts.created DESC

这个例子里 posts 表仍然是从表,但是按照从表排序的结果却没有出现文件排序和临时表,这是因为已经确定了 categories.id,所以主表相当于一个只有一行数据的常量表了,从表根据 category_id_created 索引在连接的同时自然就得到排序后的结果。但换个角度看,既然 categories.id 都是确定的了,那类似这样的需求,我们一般就不会再使用 LEFT JOIN 查询了,而会分成两个独立的查询去检索 categories 和 posts 才对。

主观上一旦搞错了主表,可能怎么调整索引都得不到高效的 SQL,所以在写 SQL 时,比如说在写 MySQL 左连接查询时,如果希望左表是主表,那么就要保证在 WHERE 语句里的查询条件尽可能多的使用左表字段,进而,一旦确定了主表,也最好只通过主表字段去 ORDER BY。

关于 mysql 中如何使用左链接查询问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注丸趣 TV 行业资讯频道了解更多相关知识。

向 AI 问一下细节

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-04发表,共计2050字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 久久综合一区二区 | 美女又黄又免费的视频 | 高清国产露脸捆绑01经典 | 一本一道久久a久久精品综合 | 狠狠爱无码一区二区三区 | 四虎成人精品国产一区a | 久久精品视频99 | 久久成人影视 | 少妇高潮喷水在线观看 | 精品在线视频观看 | 国产成人毛片毛片久久网 | 日本护士xxxx视频 | 一区二区电影网 | 亚洲免费二区三区 | 黄色免费播放器 | 久爱无码精品免费视频在线观看 | 综合爱 | 正在播放国产大学生情侣 | 精品女同一区二区三区在线 | 国产成人黄网在线免 | 国产精品极品美女自在线观看免费 | 亚洲欧美一区二区三区二厂 | 真正免费一级毛片在线播放 | 欧美性大战久久久久久久 | 一级大片在线观看 | 狠狠色噜噜狠狠狠狠色综合久av | 最近中文av字幕在线中文 | 亚洲第一福利视频 | 亚洲国产成人精品无码区99 | 一区二区三区日本视频 | 日日躁夜夜躁狠狠躁 | 国产区一区 | 又爽又黄又无遮挡的激情视频 | 国产嘿嘿嘿视频在线观看 | 熟女无套高潮内谢吼叫免费 | 99久久国产综合精麻豆 | 欧美婷婷六月丁香综合色 | 国产精品99一区二区三区 | 欧美日韩生活片 | 黑人巨茎大战欧美白妇 | 久久精品国产精品亚洲艾草网 |