标签: join

何时以及为什么数据库加入昂贵?

我正在研究数据库,我正在研究关系数据库的一些局限性.

我得到大桌子的连接是非常昂贵的,但我不完全确定为什么.DBMS需要做什么才能执行连接操作,瓶颈在哪里?
非规范化如何帮助克服这种费用?其他优化技术(例如索引)如何帮助?

欢迎个人经历!如果您要发布资源链接,请避免使用Wikipedia.我知道在哪里找到它.

与此相关,我想知道云服务数据库(如BigTable和SimpleDB)使用的非规范化方法.看到这个问题.

database performance join denormalization relational-database

343
推荐指数
4
解决办法
7万
查看次数

Rails:include vs.:join

这更像是"为什么这样做的事情"这个问题,而不是"我不知道该怎么做"这个问题......

所以关于拉动你知道你将要使用的相关记录的福音就是使用,:include因为你将获得一个连接并避免一大堆额外的查询:

Post.all(:include => :comments)
Run Code Online (Sandbox Code Playgroud)

但是,当您查看日志时,没有发生加入:

Post Load (3.7ms)   SELECT * FROM "posts"
Comment Load (0.2ms)   SELECT "comments.*" FROM "comments" 
                       WHERE ("comments".post_id IN (1,2,3,4)) 
                       ORDER BY created_at asc) 
Run Code Online (Sandbox Code Playgroud)

正在采取一种捷径,因为它会立即提取所有注释,但它仍然不是连接(这是所有文档似乎都说的).我可以获得连接的唯一方法是使用:joins而不是:include:

Post.all(:joins => :comments)
Run Code Online (Sandbox Code Playgroud)

日志显示:

Post Load (6.0ms)  SELECT "posts".* FROM "posts" 
                   INNER JOIN "comments" ON "posts".id = "comments".post_id
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?我有一个有六个关联的应用程序,在一个屏幕上我显示所有这些数据.似乎最好有一个加入查询而不是6个人.我知道在性能方面,进行连接而不是单个查询并不总是更好(事实上,如果你花费时间,看起来上面的两个单独的查询比连接更快),但是在所有文档之后我一直在阅读,我很惊讶地看到:include不像宣传的那样工作.

也许Rails的认识到性能问题,并除非在某些情况下,不加入呢?

ruby database join ruby-on-rails rails-activerecord

340
推荐指数
6
解决办法
13万
查看次数

SQL内连接有3个表吗?

我想在一个视图中加入3个表; 这是情况:

我有一张表格,其中包含申请在大学校园内生活的学生的信息.我有另一张桌子,列出了每个学生的霍尔偏好(其中3个).但是这些首选项中的每一个仅仅是一个ID号,并且ID号在第三个表中具有相应的Hall Name(没有设计该数据库......).

差不多,我INNER JOIN在桌子上有他们的偏好和他们的信息,结果是......

 John Doe | 923423 | Incoming Student | 005
Run Code Online (Sandbox Code Playgroud)

哪个005会是HallID.所以现在我想将它HallID与第三个表匹配,其中该表包含一个HallIDHallName.

所以,我希望我的结果像......

 John Doe | 923423 | Incoming Student | Foley Hall <---(INSTEAD OF 005)
Run Code Online (Sandbox Code Playgroud)

这是我目前拥有的:

SELECT
  s.StudentID, s.FName, 
  s.LName, s.Gender, s.BirthDate, s.Email, 
  r.HallPref1, r.HallPref2, r.HallPref3
FROM
  dbo.StudentSignUp AS s 
  INNER JOIN RoomSignUp.dbo.Incoming_Applications_Current AS r 
    ON s.StudentID = r.StudentID 
  INNER JOIN HallData.dbo.Halls AS h 
    ON r.HallPref1 = h.HallID
Run Code Online (Sandbox Code Playgroud)

sql join inner-join

308
推荐指数
4
解决办法
124万
查看次数

如何使用一个SQL查询获取多个计数?

我想知道如何编写此查询.

我知道这个实际的语法是假的,但它会帮助你理解我想要的东西.我需要这种格式,因为它是一个更大的查询的一部分.

SELECT distributor_id, 
COUNT(*) AS TOTAL, 
COUNT(*) WHERE level = 'exec', 
COUNT(*) WHERE level = 'personal'
Run Code Online (Sandbox Code Playgroud)

我需要在一个查询中返回所有内容.

此外,它需要在一行,所以以下将不起作用:

'SELECT distributor_id, COUNT(*)
GROUP BY distributor_id'
Run Code Online (Sandbox Code Playgroud)

mysql sql join group-by count

278
推荐指数
8
解决办法
32万
查看次数

熊猫合并101

  • 如何用pandas 执行(LEFT| RIGHT| FULL)(INNER| OUTER)连接?
  • 合并后如何为缺失的行添加NaN?
  • 合并后如何摆脱NaN?
  • 我可以合并索引吗?
  • 如何合并多个DataFrame?
  • mergejoinconcatupdate?谁?什么?为什么?!

... 和更多.我已经看到了这些反复出现的问题,询问了pandas合并功能的各个方面.今天关于合并及其各种用例的大部分信息在几十个措辞严厉,不可搜索的帖子中都是分散的.这里的目的是为后代整理一些更重要的观点.

这个QnA应该是关于常见熊猫习语的一系列有用的用户指南的下一部分(参见关于转动的这篇文章,以及关于连接的这篇文章,我将在稍后介绍).

请注意,这篇文章并不是文档的替代品,所以请阅读它!一些例子来自那里.

python merge join pandas

271
推荐指数
6
解决办法
4万
查看次数

SQL连接:选择一对多关系中的最后一条记录

假设我有一张顾客表和一张购买表.每次购买都属于一个客户.我想在一个SELECT语句中获取所有客户的列表以及他们上次购买的列表.什么是最佳做法?有关构建索引的建议吗?

请在答案中使用这些表/列名称:

  • 顾客:身份证,姓名
  • 购买:id,customer_id,item_id,日期

在更复杂的情况下,通过将最后一次购买放入客户表中,是否(性能方面)有利于对数据库进行非规范化?

如果(购买)ID保证按日期排序,是否可以通过使用类似的方式简化语句LIMIT 1

sql indexing select join greatest-n-per-group

268
推荐指数
10
解决办法
21万
查看次数

Java:PHP的join()等数组的函数?

我想String[]加一个胶水串.这有功能吗?

php java arrays join

255
推荐指数
12
解决办法
13万
查看次数

SQL离开连接与FROM行上的多个表?

大多数SQL方言都接受以下查询:

SELECT a.foo, b.foo
FROM a, b
WHERE a.x = b.x

SELECT a.foo, b.foo
FROM a
LEFT JOIN b ON a.x = b.x
Run Code Online (Sandbox Code Playgroud)

现在很明显,当您需要外连接时,需要第二种语法.但是在进行内部连接时,为什么我更喜欢第二种语法(反之亦然)?

sql syntax join

245
推荐指数
7
解决办法
25万
查看次数

MySQL ON vs USING?

在MySQL中JOIN,ON和之间有什么区别USING()?据我所知,USING()只是更方便的语法,而ON当列名不相同时允许更多的灵活性.然而,这种差异是如此微小,你会认为他们只是消失了USING().

除此之外还有更多的东西吗?如果是,我应该在特定情况下使用哪个?

mysql join using

243
推荐指数
4
解决办法
16万
查看次数

MySQL从一个表中选择所有列,从另一个表中选择一些列

如何使用JOIN从一个表中选择所有列,从另一个表中选择一些列?在MySQL中.

mysql select join

242
推荐指数
4
解决办法
21万
查看次数