标签: join

mysql 如何处理涉及 myisam 和 innodb 表的查询?

在我们的mysql数据库中,我们同时使用myisam和innodb表,尽管还有更多的myisam表。

问题

  • 如果查询同时涉及myisam和innodb表,查询对innodb表使用表锁还是行锁?
  • 这是一个好的做法吗?

mysql innodb myisam join

5
推荐指数
1
解决办法
2948
查看次数

PostgreSQL 似乎在简单的条件连接中创建了低效的计划

考虑这两个查询:

SELECT
    t1.id, *
FROM
    t1
INNER JOIN
    t2 ON t1.id = t2.id
    where t1.id > -9223372036513411363;
Run Code Online (Sandbox Code Playgroud)

和:

SELECT
    t1.id, *
FROM
    t1
INNER JOIN
    t2 ON t1.id = t2.id
    where t1.id > -9223372036513411363 and t2.id > -9223372036513411363;
Run Code Online (Sandbox Code Playgroud)

注意:不是-9223372036513411363表中的最小值,并且条件将结果(从总行数 3.5 亿行)减少到 1700 万行。

就我个人而言,我希望 PostgreSQL 能够为这两个查询提供相同的计划,因为t1.id = t2.id自动意味着第二个条件。但不幸的是,PostgreSQL 正在创建两个不同的计划,第二个计划要好得多:

我非常喜欢第一个查询,因为我想从连接创建一个视图,并将 where 条件放在视图上的查询上,我在其中看到单个 id 列(我使用连接,USING因此单个 id 列在视图中可见) 。另外,我将连接两个以上的表,并且我不希望为每个连接添加这样的条件。

这种行为有什么原因吗?或者这是一个错误?有什么解决方法吗?

  • 替换ON …

postgresql performance join execution-plan postgresql-9.3 postgresql-performance

5
推荐指数
1
解决办法
693
查看次数

SQLite JOIN ... USING - rowid 有效,但随后不起作用

这有效。

SELECT *
FROM Demographics
JOIN MeasuresofBirthAndDeath
ON Demographics.rowid = MeasuresofBirthAndDeath.rowid;
Run Code Online (Sandbox Code Playgroud)

这不。

SELECT *
FROM Demographics 
JOIN MeasuresofBirthandDeath
USING (rowid);
Run Code Online (Sandbox Code Playgroud)

为什么?

join

5
推荐指数
1
解决办法
2991
查看次数

JOIN 中的 MySQL LIMIT

我有一个 1:m 协会。

symbols表中有很多行company_key_statisticscompany_key_statistics有一个时间戳列createdAt,指示行的创建时间。我需要加入最新symbolscompany_key_statistics,但我只需要最新的company_key_statistics。例如,我需要获取ORCL并且MSFT symbols仅获取他们最新的company_key_statistics.

到目前为止我已经尝试过了。

SELECT `symbols`.`id`, 
       `symbols`.`symbol`, 
       `statistics`.
       `marketCapitalization` 
FROM   `symbols` 
       LEFT JOIN (SELECT `s`.`companyId`, 
                         `s`.`marketCapitalization` 
                  FROM   `company_key_statistics` AS `s`
                  WHERE  `s`.`companyId` = `symbols`.`id` 
                  ORDER by `createdAt` 
                  DESC LIMIT 1) AS `statistics` 
ON     `symbols`.`id` = `statistics`.`companyId` 
WHERE  `symbols`.`symbol` IN ('ORCL', 'SNAP');
Run Code Online (Sandbox Code Playgroud)

但不幸的是我发现我不能在子查询中使用父查询中的列JOIN

我怎样才能做到这一点?

mysql join subquery limits

5
推荐指数
1
解决办法
4万
查看次数

如何在 postgres 上同时通过连接对多个表运行更新查询?

在 MySQL 中,我可以执行这样的查询

UPDATE 
    prd_sectionshapename  se
inner join 
    prd_shape s
ON
    s.id = se.shape_id
SET
   se.company_shape_name = 'ABC',
   s.name_en = 'Another name'
WHERE s.serial_number = '1234ST';
Run Code Online (Sandbox Code Playgroud)

在 Postgres 中,我需要分成 2 个查询

UPDATE prd_shape AS s
SET name_en = 'Another name'
WHERE s.serial_number = '1234ST';


UPDATE prd_sectionshapename AS se
SET company_shape_name = 'ABC'
FROM prd_shape s
WHERE se.shape_id = s.id and s.serial_number = '1234ST';
Run Code Online (Sandbox Code Playgroud)

我的问题是可以像 MySQL 一样在 1 个查询中完成它吗?

请注意,我在互联网上找到的其他 postgres 更新联接答案通常表明,即使使用了联接,更新效果也仅发生在单个表上。

我的目的是在一个查询中更新多个表。不只是一张桌子。

postgresql join update

5
推荐指数
1
解决办法
3万
查看次数

是否有左交叉连接之类的东西?

有没有办法做我想要的“左交叉连接”?

即,是否有一种方法可以指定 CROSS JOIN ON,但在结果中为左侧的每一行至少返回一行,当右侧表不包含匹配项时,对右侧列使用空值?

join sql-server cross-join

5
推荐指数
1
解决办法
5965
查看次数

根据PostgreSQL/TimescaleDB中的关系数据选择遥测数据

我正在尝试解决一个特别困难的问题。我正在 SQL 表 (PostgreSQL) 中存储来自某些传感器的一些遥测数据,我想知道如何编写一个查询,该查询将使用来自其他两个表的关系信息对遥测数据进行分组。

我有一张表存储来自传感器的遥测数据。该表包含三个字段,一为时间戳,一为传感器ID,一为传感器当时的值。值列是一个递增计数(它只会增加,不会重置)

Sensor_Telemetry

时间戳 传感器 ID 价值
2022-01-01 00:00:00 5 3
2022-01-01 00:00:01 5 5
2022-01-01 00:00:02 5 6
... ... ...
2022-01-01 01:00:00 5 第675章

我有另一个表,用于存储传感器的状态(无论是静止还是运动)以及该传感器的特定状态的开始/结束日期:

状态

开始日期 结束日期 地位 传感器 ID
2022-01-01 00:00:00 2022-01-01 00:20:00 运动中 5
2022-01-01 00:20:00 2022-01-01 00:40:00 固定式 5
2022-01-01 00:40:00 2022-01-01 01:00:00 运动中 5
... ... ... ...

传感器位于特定位置。Sensor 表存储以下元数据:

传感器

传感器 ID 位置ID
5 16

在决赛表中,我有每个位置发生的变化。班次表是所有班次发生的列表,即在本例中,班次 A 定义为每天 00:00:00 到 00:30:00 之间发生,班次 B 定义为每天 00:30 …

postgresql join query aggregate timescaledb

5
推荐指数
1
解决办法
188
查看次数

选择第一列中不存在第二列值的行

我有这个表结构:

 id1 id2
 1   2 
 1   3
 1   4
 2   1
 2   5
Run Code Online (Sandbox Code Playgroud)

我需要构建一个查询来选择id2where id1is not in id2. 例如,如果id1 = 1只有id2=3id2=4
我试过这个:

SET @a=1;
SELECT DISTINCT x.id2 
 FROM tt x, tt y 
 WHERE x.id1=@a AND x.id1 != y.id2;
Run Code Online (Sandbox Code Playgroud)

但它不起作用。

mysql join

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

MS SQL 中的 SQL JOIN 语法

我在 MSSQL 课上教过,这是如何连接两个表

select * from FirstTable A
JOIN SecondTable B
on A.ID= B.ID
Run Code Online (Sandbox Code Playgroud)

现在在我的职业生涯中,我遇到过这样的 JOIN 查询

select * from FirstTable A, SecondTable B
where A.ID=B.ID
Run Code Online (Sandbox Code Playgroud)

我知道第二种选择曾经是常态,但现在可能已经放弃了。

我发现在我加入 6+ 个表 + 有多个子查询的复杂查询中,第二种形式更容易理解,而且简短漂亮。

问题

  • 我应该使用哪一种?
  • 一个比另一个有优势吗?

sql-server-2008 join

4
推荐指数
2
解决办法
676
查看次数

提高讨厌的嵌套视图连接的性能

我有一个中等大小的数据库,分布在几个表上,粗略的架构是:

  • 输入数据(数据 ID、会话 ID 和一些具有统计重要性的字段)
  • 输入文件(数据 ID 和 blob)
  • 阶段 1 输出文件(数据 ID 和 blob)
  • 阶段 2 输出文件(数据 ID 和 blob)
  • 类别 1 结果(数据 ID 和一些布尔值)
  • 类别 2 结果(数据 ID 和一些整数)
  • 第 3 类结果(数据 ID 和一些整数)

每个表有大约 200,000 行。

我还有一个视图,它基本上将所有这些粘合在一起,以便我可以SELECT使用一堆 ID(通常根据会话 ID 选择它们)并在一个页面上查看所有相关数据。

该视图有效,查询计划的索引利用率似乎正常,但结果并不快:

> EXPLAIN ANALYZE SELECT(*) FROM overlay WHERE test_session=12345;

                 QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Merge Right Join  (cost=7.19..74179.49 rows=10 width=305) (actual time=10680.129..10680.494 rows=4 loops=1)
   Merge Cond: (p.data_id = d.id)
   ->  Merge Join  (cost=7.19..75077.04 rows=183718 width=234) …
Run Code Online (Sandbox Code Playgroud)

postgresql performance index join view

4
推荐指数
1
解决办法
4563
查看次数