标签: query

无法解释的 InnoDB 超时

我最近看到一些非常基本的更新超时,但无法确定原因。一个例子:

//# Query_time: 51 Lock_time: 0 Rows_sent: 0 Rows_examined: 0

UPDATE photos SET position = position + 1 WHERE (photo_album_id = 40470);

同一个日志没有 Lock_time > 0 的条目。运行show innodb status也不会显示任何相关的锁。根据我的应用服务器日志(显示Mysql::Error: Lock wait timeout exceeded与 mysql-slow 日志中的每个相应条目相关的错误),此问题似乎影响了至少 5 个不同的表。

知道从这里去哪里吗?我在各个方向都陷入了死胡同。谢谢。

编辑:

创建表`照片`(
  `id` int(11) NOT NULL auto_increment,
  `type` varchar(255) 非空,
  `photo_album_id` int(11) 非空,
  `user_id` int(11) 非空,
  `title` varchar(255) 默认为“无标题”,
  `描述`文本,
  `credit` varchar(255) 默认为 NULL,
  `photo_file_name` varchar(255) 默认为 NULL,
  `photo_content_type` varchar(255) 默认为 NULL,
  `photo_file_size` int(11) 默认为 NULL,
  `photo_updated_at` 日期时间默认为 …

mysql innodb query locked-objects

11
推荐指数
1
解决办法
2288
查看次数

在 SQL Server 中找出多少记录没有正确电话号码的最佳方法是什么?

我有一个领域,人们历史上可以用来自由提供价值。我需要识别没有适当值的记录,以便我可以清理它们。

为此,我一直在 SSIS 中四处寻找。我的倾向是在某些 C# 代码中使用带有正则表达式的脚本组件,然后进行重定向。不过,我想知道 SSIS 中是否有一种方法可以在不求助于 C# 的情况下做到这一点。

我没有太多运气找到一种方法来找出有多少记录没有合适的电话号码。

sql-server-2008 sql-server query

11
推荐指数
1
解决办法
272
查看次数

SQLITE:标签和产品的问题

我正在寻找一种创建查询以执行以下操作的方法:

让我们考虑 3 个表:

  • 产品:产品列表
  • 标签:标签列表
  • tag_ties:用于将标签与产品相关联的表

让我们考虑每个表的这种结构:

产品:

  • id(整数,自动增量)
  • 名称(varchar,产品名称)

标签:

  • id (int 自动增量)
  • 标签(varchar,标签的标签)

标签关系:

  • id(整数,自动增量)
  • tag_id(整数,对标签 ID 的引用)
  • ref_id(整数,对产品 ID 的引用)

我想要的是:

例如,获取所有标记为标签 id 10、11 和 12 的产品。

此查询不起作用,因为它返回至少具有以下标签之一的产品:

select 
    p.name as name,
    p.id as id
from 
    products p inner join tag_ties ties
on
    p.id=ties.ref_id
where
    ties.ref_id=p.id and
    ties.tag_id in (10,11,12)
group by 
    p.id
order by 
    p.name asc
Run Code Online (Sandbox Code Playgroud)

sqlite query subquery

11
推荐指数
3
解决办法
2805
查看次数

MS Access 中的完全外部联接

我有两个员工名单:

List A:

StaffID   Supervisor
====================
0001234         NULL
0001235      0001234
0001237      0001234
0001239      0001237
Run Code Online (Sandbox Code Playgroud)

List B:

StaffID   Supervisor
====================
0001234         NULL
0001235      0001234
0001238      0001235
0001239      0001235
Run Code Online (Sandbox Code Playgroud)

我需要以下输出:

StaffID   SupervisorA   SupervisorB
===================================
0001234          NULL          NULL
0001235       0001234       0001234
0001237       0001234          NULL
0001238          NULL       0001235
0001239       0001237       0001235
Run Code Online (Sandbox Code Playgroud)

请注意,列表 A 和列表 B 中的员工 ID 已合并到一个不重复的列表中,并且我已合并了两个列表之间可能不匹配的两个主管详细信息。

查询不必很好。我在每个列表中有大约 8000 条记录,我会很好地运行它。如有必要,我很乐意在之后进行一些小的 Excel 操作。

我想做一个完整的联接,但联接上的 Access 查询设计器属性窗口允许我从表 A 中选择 ALL 并从表 B 中进行匹配、从表 B 中选择 ALL 并从表 A 中进行匹配,或者仅选择在两个 A 中都匹配的那些和 B。

我确信这很简单,但我很少使用 MS …

join ms-access query

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

检查 2 个表(在不同服务器上)是否具有完全相同的数据

因此,托管我们的 SQL Server 的公司似乎在从生产服务器到备份服务器的复制方面遇到了一些麻烦……不过我相信有些表已经正确复制了。每天(下班后)进行复制。

有没有办法可以比较 2 个相同的表,1 个来自备份,1 个来自生产服务器,看看昨晚的复制是否有效?

我能找到的唯一方法是在两台服务器上运行以下查询并查看结果是否匹配,这“可能”意味着 2 个表包含相同的信息。

SELECT CHECKSUM_AGG(BINARY_CHECKSUM(*))
        FROM   (

                    SELECT  * 
                    FROM    table_to_compare
               ) t1
Run Code Online (Sandbox Code Playgroud)

使用上面的代码,似乎该表确实复制成功,因为校验和值相同,但我不确定这种方法有多可靠。

有谁知道更好的方法来检查这个或者这是否是一个好方法?

我在 Windows Server 2008 计算机上运行 SQL Server 2008。

谢谢。

sql-server-2008 query

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

在同一个查询 INSERT 中,两个 VALUES 是 NOW() 是否可以返回不同的时间?

我遇到了类似的查询

INSERT INTO mytable (id, Created, Updated) VALUES (null, NOW(), NOW())
Run Code Online (Sandbox Code Playgroud)

有列定义

| Created   | datetime |
| Updated   | datetime |
Run Code Online (Sandbox Code Playgroud)

在这种情况下,MySQL 是否会将 NOW() 值设置为当前时间并向两个调用返回相同的值,或者该查询是否会运行(不太可能)风险,即 Created 和 Updated 的时间略有不同?

注意:我无法更改字段类型。

mysql query datetime mariadb-10.2

11
推荐指数
2
解决办法
2430
查看次数

SQL Select 执行时间过长

这是从临时表中进行的简单选择,在其主键上加入现有表,两个子选择使用 top 1 引用连接表。

在代码中:

SELECT
    TempTable.Col1,
    TempTable.Col2,
    TempTable.Col3,
    JoinedTable.Col1,
    JoinedTable.Col2,
    (
        SELECT TOP 1
            ThirdTable.Col1 -- Which is ThirdTable's Primary Key
        FROM
            ThirdTable
        WHERE
            ThirdTable.SomeColumn = JoinedTable.SomeColumn
    ) as ThirdTableColumn1,
    (
        SELECT TOP 1
            ThirdTable.Col1 -- Which is also ThirdTable's Primary Key
        FROM
            ThirdTable
        WHERE
            ThirdTable.SomeOtherColumn = JoinedTable.SomeColumn
    ) as ThirdTableColumn2,
FROM
    #TempTable as TempTable
LEFT JOIN
    JoinedTable
ON (TempTable.PKColumn1 = JoinedTable.PKColumn1 AND 
    TempTable.PKColumn2 = JoinedTable.PKColumn2)
WHERE
    JoinedTable.WhereColumn IN  (1, 3)
Run Code Online (Sandbox Code Playgroud)

这是我的查询的精确副本。

如果我删除两个子选择,它运行得很好而且很快。通过两个子选择,我每秒得到大约 100 条记录,这对于这个查询来说非常慢,因为它应该返回近一百万条记录。

我已经检查过是否每张表都有一个主键,他们都有。它们都有重要列的索引和统计信息,就像那些 WHERE 子句中的那些,以及 JOIN …

sql-server-2005 sql-server query statistics

10
推荐指数
2
解决办法
6万
查看次数

查询问题:自动列只能有一个

有人可以告诉我这个表定义有什么问题。
mysql 版本是 5.1.52-log

root@localhost spoolrdb> create table spoolqueue (
                             queue int,
                             idx bigint not null auto_increment,
                             status smallint,
                             querystring varchar(2048),
                             contenttype varchar(255),
                             characterencoding varchar(16),
                             body text,
                             primary key(queue,idx)
                             );
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
Run Code Online (Sandbox Code Playgroud)

mysql query

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

如何检索外键约束数据

我正在寻找一个查询,允许检索整个模式的外键信息(每行:引用表和字段、引用表和字段)。

我找到了这个,但没有提供我需要的所有信息:https : //stackoverflow.com/questions/4389228/sql-for-oracle-to-check-if-a-constraint-exists

我目前正在研究它,可能会在接下来的几分钟/几小时内得到解决方案。但是如果有人已经有了完整的工作解决方案,我会很高兴知道它:)

oracle foreign-key query

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

如何提高 MS SQL Server 中原始查询的性能?

我有一个 ASP.NET 网站,它自己独立缓存数据,并且数据在很长一段时间内不会改变,所以它不需要用相同的查询第二次查询 SQL Server。我需要提高到该 SQL Server 的首次(原始)查询的性能。某些查询处理的数据过多,可能会导致 SQL Server 使用tempdb. 我不使用临时表变量或临时表,因此 SQL Server 决定tempdb在需要时自行使用。

我的数据库大小是 16Gb,我的服务器机器上有 32Gb 的物理 RAM。

我知道 MS SQL Server 缓存策略会尝试将数据保留在 RAM 中,以在类似查询需要再次加载相同数据时提高它们的性能。除此之外,它会尝试使用可用 RAM 而不是 tempdb 来提高性能,而不会导致磁盘访问。

我想当需要在 tempdb SQL Server 中存储某些内容的查询出现并且没有足够的可用 RAM 时,SQL Server 有两种选择:

1) 卸载一些缓存数据并使用备用 RAM 而不是 tempdb 以避免磁盘写入

2) 为将来的查询保留缓存数据并开始使用 tempdb,这会导致写入磁盘速度变慢。

我不知道 SQL Server 在这种情况下会做出什么选择,但我希望它做出选择 #1,因为我只关心首次(原始)查询的性能,因为我再也不会向 SQL Server 发送相同的查询(虽然我可能会发送类似的查询)。

这种情况下的 SQL Server 缓存策略是什么?

它如何在避免原始查询的 tempdb 和第二次查询的速度之间平衡 RAM 的使用?

是否可以将 SQL Server 配置为做出选择 #1 的方式?如果是,那么如何?

我还能如何提高所有原始 SQL 查询的性能?

由于我不知道 …

performance sql-server query sql-server-2008-r2 cache

10
推荐指数
1
解决办法
6234
查看次数