标签: query

使用 WHERE IN 删除操作期间的意外扫描

我有一个类似如下的查询:

DELETE FROM tblFEStatsBrowsers WHERE BrowserID NOT IN (
    SELECT DISTINCT BrowserID FROM tblFEStatsPaperHits WITH (NOLOCK) WHERE BrowserID IS NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

tblFEStatsBrowsers 有 553 行。
tblFEStatsPaperHits 有 47.974.301 行。

tblFEStatsBrowsers:

CREATE TABLE [dbo].[tblFEStatsBrowsers](
    [BrowserID] [smallint] IDENTITY(1,1) NOT NULL,
    [Browser] [varchar](50) NOT NULL,
    [Name] [varchar](40) NOT NULL,
    [Version] [varchar](10) NOT NULL,
    CONSTRAINT [PK_tblFEStatsBrowsers] PRIMARY KEY CLUSTERED ([BrowserID] ASC)
)
Run Code Online (Sandbox Code Playgroud)

tblFEStatsPaperHits:

CREATE TABLE [dbo].[tblFEStatsPaperHits](
    [PaperID] [int] NOT NULL,
    [Created] [smalldatetime] NOT NULL,
    [IP] [binary](4) NULL,
    [PlatformID] [tinyint] NULL,
    [BrowserID] [smallint] NULL, …
Run Code Online (Sandbox Code Playgroud)

query optimization sql-server-2008-r2

40
推荐指数
3
解决办法
4146
查看次数

如何为一列选择不同的列和另一列中的任何列?

我需要查询 SQL 数据库以查找一列的所有不同值,我需要另一列中的任意值。例如,考虑下表有两列,键和值:

key     value
===     =====
one     test
one     another
one     value
two     goes
two     here
two     also
three   example
Run Code Online (Sandbox Code Playgroud)

我希望从每个不同的键中取回一个任意选择的样本行,也许得到这三行:

key     value
===     =====
one     test
two     goes
three   example
Run Code Online (Sandbox Code Playgroud)

如何在 SQL 中制定这样的查询?

query

40
推荐指数
2
解决办法
25万
查看次数

索引 VARCHAR 列是个好主意/方法吗?

我们使用的是 PostgreSQL v8.2.3。

涉及的表有:EMPLOYEEEMAILLIST

Table 1: EMPLOYEE (column1, column2, email1, email2, column5, column6)
Table 2: EMAILLIST (email)
Run Code Online (Sandbox Code Playgroud)

2 个表以这样的方式连接,如果 EMPLOYEE.EMAIL1 或 EMPLOYEE.EMAIL2 没有匹配的条目,则将返回这些行。

SELECT employee.email1, employee.email2,
        e1.email IS NOT NULL AS email1_matched, e2.email IS NOT NULL AS email2_matched
   FROM employee
   LEFT JOIN emaillist e1 ON e1.email = employee.email1
   LEFT JOIN emaillist e2 ON e2.email = employee.email2
 WHERE e1.email IS NULL OR e2.email IS NULL
Run Code Online (Sandbox Code Playgroud)

EMAILVARCHAR(256)EMAILLIST表索引。现在,响应时间是 14 秒。

表数统计:目前EMPLOYEE有165,018条记录,EMAILLIST有1,810,228条记录,未来两个表都有望增长。

  1. 索引 VARCHAR …

postgresql performance index query

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

查询调优应该是主动的还是被动的?

作为一名软件开发人员和一名有抱负的 DBA,我在设计 SQL Server 数据库时尝试结合最佳实践(我的软件 99% 的时间位于 SQL Server 之上)。我在开发之前和开发过程中做出最好的设计。

但是,就像任何其他软件开发人员一样,存在需要更改/创建的数据库对象的附加功能、错误和需求更改。

我的问题是,查询优化应该是主动的还是被动的?换句话说,在一些大量的代码/数据库修改几周后,我是否应该留出一天来检查查询性能并根据它进行调整?即使它似乎运行正常

或者我应该知道低于平均水平的性能应该是数据库检查并回到众所周知的黑板?

查询调优可能会占用大量时间,并且取决于初始数据库设计,它可能是最小的好处。我对公认的作案手法感到好奇。

performance query performance-testing

23
推荐指数
5
解决办法
1224
查看次数

表和视图有通用术语吗?

我正在寻找一个通用术语,例如数据库抽象,它包括所有表格数据结构,如数据库表、视图、表格查询结果。

据我了解,“实体”不是正确的术语,因为它对应于表,而不是视图,甚至不是查询。“结果”对于可修改的数据结构来说是违反直觉的。

在专业环境中哪个是合适的术语?

query terminology view table

23
推荐指数
2
解决办法
3249
查看次数

为什么 NOT IN 包含 NULL 的集合总是返回 FALSE/NULL?

我有一个查询(针对 Postgres 和 Informix),其中NOT IN包含一个子查询,该子查询在某些情况下返回NULL值,导致该子句(以及整个查询)无法返回任何内容。

理解这一点的最佳方式是什么?我认为NULL没有价值的东西,因此不希望查询失败,但显然这不是考虑NULL.

postgresql null query informix

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

GROUP BY B,A 和 GROUP BY COALESCE(B,A) 之间的区别

我一直让自己很困惑。

有人可以解释一下在什么情况下我想使用 GROUP BY COALESCE 吗?

我的猜测是,如果我想按 B 列(如果 B 不为空)和 A 列有条件地对一组数据进行分组,我会使用它。听起来对吗?

oracle query

20
推荐指数
2
解决办法
7025
查看次数

在 Postgresql 查询中有效地选择多个连续范围的开始和结束

我在一个表中有大约 10 亿行数据,其中有一个名称和一个 1-288 范围内的整数。对于给定的name,每个int都是唯一的,并且并非该范围内的每个可能的整数都存在——因此存在间隙。

此查询生成一个示例案例:

--what I have:
SELECT *
FROM ( VALUES ('foo', 2),
              ('foo', 3),
              ('foo', 4),
              ('foo', 10),
              ('foo', 11),
              ('foo', 13),
              ('bar', 1),
              ('bar', 2),
              ('bar', 3)
     ) AS baz ("name", "int")
Run Code Online (Sandbox Code Playgroud)

我想为每个名称和连续整数序列生成一个查找表。每个这样的行将包含:

name -- name列的值
start -- 连续序列中的第一个整数
end --连续序列中的最后一个值
span -- end - start + 1

此查询为上述示例生成示例输出:

--what I need:
SELECT * 
FROM ( VALUES ('foo', 2, 4, 3),
              ('foo', 10, 11, 2),
              ('foo', 13, 13, 1),
              ('bar', …
Run Code Online (Sandbox Code Playgroud)

postgresql query

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

如何在 MySQL 服务器上显示 binlog_format?

如何binlog_format在 MySQL 服务器上显示?

如果我不喜欢它,我如何将它永久设置为XX

其中XXSTATEMENTROWMIXED

mysql query

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

连接字符串或程序化以防止 SQL 查询代码重复的替代方法?

免责声明:作为一个只使用数据库一小部分工作时间的人,请耐心等待。(大部分时间我在工作中进行 C++ 编程,但每个奇数月我都需要在 Oracle 数据库中搜索/修复/添加一些内容。)

我一再需要编写复杂的 SQL 查询,包括临时查询和内置于应用程序的查询,其中大部分查询只是重复“代码”。

用传统的编程语言编写这种可憎的东西会让你陷入困境,但我()还没有找到任何像样的技术来防止 SQL 查询代码重复。


编辑:第一,我要感谢对我的原始示例提供出色改进的回答者。但是,这个问题与我的示例无关。这是关于 SQL 查询中的重复性。因此,到目前为止的答案(JackPLeigh)都很好地表明您可以通过编写更好的查询来减少重复性。然而,即便如此,您仍面临一些显然无法消除的重复性:这总是用 SQL 烦扰我。在“传统”编程语言中,我可以进行大量重构以最大程度地减少代码中的重复性,但是对于 SQL,似乎没有(?)工具可以实现这一点,除非开始编写重复性较低的语句。

请注意,我再次删除了 Oracle 标记,因为我真的很想知道是否没有允许更多内容的数据库或脚本语言。


这是我今天拼凑起来的一颗这样的宝石。它基本上报告了单个表的一组列中的差异。请浏览以下代码,尤其是。最后的大查询。下面我继续说。

--
-- Create Table to test queries
--
CREATE TABLE TEST_ATTRIBS (
id NUMBER PRIMARY KEY,
name  VARCHAR2(300) UNIQUE,
attr1 VARCHAR2(2000),
attr2 VARCHAR2(2000),
attr3 INTEGER,
attr4 NUMBER,
attr5 VARCHAR2(2000)
);

--
-- insert some test data
--
insert into TEST_ATTRIBS values ( 1, 'Alfred',   'a', 'Foobar', …
Run Code Online (Sandbox Code Playgroud)

query scripting dynamic-sql

19
推荐指数
2
解决办法
2142
查看次数