小编McN*_*ets的帖子

MYSQL 使用 UNION ALL 减慢速度

我必须有 2 个表,第一个是带有 3.000.000 条记录的 MEMORY 表,第二个现在是空的。这些表的结构是相同的,都有一个 int(11) 主键,两个表的主键字段都不同(两个表中不可能有相同的键)

如果我查询第一个表,我会在 0.1 秒内得到答案,那么第二个表的查询会立即 0.01 秒。但是将 2 与 UNION ALL 合并非常慢(1 分 21 秒)。

SELECT * FROM memtable1 LIMIT 1000 
Run Code Online (Sandbox Code Playgroud)

(0.1 秒)

SELECT * FROM table2 LIMIT 1000 
Run Code Online (Sandbox Code Playgroud)

(0.01 秒)

SELECT * FROM memtable1 
UNION ALL 
SELECT * FROM table2 LIMIT 1000 
Run Code Online (Sandbox Code Playgroud)

(1分21秒)

如何提高查询速度?

mysql

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

使用多个where条件和多列进行查询

我有一张Policies桌子。


  • 策略ID
  • 状态(“待处理”或“已发布”)
  • 待定日期
  • 签发日期

现在我需要在10 月份获得所有待处理Policies的 a和所有已发出的a 。pendDateOctoberPoliciesissueDate

我在用着postgreSQL 9.6。这些日期可以为空,所以我不能使用简单的AND. 那个月我只需要 和pendingissued所以 OR 不起作用。

我解决了两个查询,但现在正在添加更多状态,我想以某种方式进行整合。可能的?

postgresql postgresql-9.6

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

Postgres 错误:必须出现在 GROUP BY 子句中或在聚合函数中使用

我是 Postgres 的新手,我意识到以前有人问过类似的问题,但是,我正在努力使这个查询工作:

SELECT    p_search.id, count(kia.image_id) AS count
FROM      (SELECT id,
                  keyword,
                  to_tsvector('english',keyword) AS tskw
          FROM keyword) AS p_search
LEFT JOIN keyword_image_assoc AS kia 
ON        kia.keyword_id = p_search.id
WHERE     p_search.tskw @@ plainto_tsquery('english','resident life')
OR        p_search.tskw @@ plainto_tsquery('english','wofford')
GROUP BY  kia.image_id
ORDER BY  count desc
Run Code Online (Sandbox Code Playgroud)

对于上下文,我有三个表:

  • image其中有一个id作为主键
  • keyword它具有id作为主键,keyword它是一个表示关键字的字符串
  • keyword_image_assoc其中有一个idimage_id并且keyword_id它是用来关联图像和关键字规范地。

如果我添加p_search.idGROUP BY子句中,结果不正确 -count总是 1。有没有办法对结果进行分组,以便image_ids 具有匹配关键字的数量?

我正在寻找两列count- 匹配关键字的数量和 …

postgresql postgresql-9.3

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

PostgreSQL 如何获取不区分大小写的模式名称

我创建了一个带有大写字母的架构,如下所示:

CREATE SCHEMA "requeteSQL"  AUTHORIZATION ......;
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试GRANT一些特权时,例如:

GRANT SELECT ON ALL TABLES IN SCHEMA requetesql  TO ....;
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

ERROR:  schema "requetesql" does not exist
Run Code Online (Sandbox Code Playgroud)

schema postgresql

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

NULL 作为 WHERE 子句中的 @variable

我想将 'IS NULL' 设置为变量并在 WHERE 子句中使用它。我会将许多带有相同 WHERE 子句的表合并在一起,并希望灵活地为我的yearCompleted列使用一个变量- 请参见下面的示例 -

DECLARE @YEARCOMPLETED
SET @YEARCOMPLETED = NULL

SELECT * FROM TABLE1
WHERE yearCompleted = @YEARCOMPLETED
UNION ALL
SELECT * FROM TABLE2
WHERE yearCompleted = @YEARCOMPLETED
Run Code Online (Sandbox Code Playgroud)

在这种情况下,是否可以使用变量找到 yearCompleted 为 NULL 的行?

null sql-server

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

如何从由记录标识符连接的 3 个表中检索数据?

我有3张桌子。

我需要使用特定WHERE条件检查这些表中是否存在特定标识符。我需要从所有 3 个表中获取数据。

我已经试过LEFT JOINRIGHT JOIN而且FULL OUTER JOIN但我无法得到中间表的值。

我的查询尝试是:

Select t1.col1, t2.col2, t3.col3
from t1
left outer join t2
on t1.id=t2.id
full outer join t3
on t1.id=t3.id
where t.id= '101';
Run Code Online (Sandbox Code Playgroud)

我无法获得仅存在于 t2 表中的值。

join query

0
推荐指数
1
解决办法
478
查看次数

数据库文件和文件组

在我的情况下,我有一个文件file_01.mdf并且file_02.ndf在 1 个文件组下,如果file_01.mdf已经满了(没有启用自动增长),file_01.mdf如果尝试在其中添加数据,它会出错吗?

sql-server filegroups

0
推荐指数
1
解决办法
89
查看次数

“同时处理多行。减少并重试。” SQL Server Management Studio 中的错误

尝试从 SQL Server Management Studio v18.5 更新某些行时出现此错误:

消息 50000,级别 16,状态 1,过程 UPDATElimit,第 7 行 [批处理起始行 0] 要同时处理许多行。减少并重试。Msg 3609, Level 16, State 1, Line 1 事务在触发器中结束。该批次已中止。

我怎样才能绕过这个限制?

触发代码:

ALTER TRIGGER [dbo].[UPDATElimit] 
on [dbo].[table] 
FOR UPDATE 
AS 
BEGIN 
    IF (select count(*) from inserted) > 1000 
    BEGIN 
        RAISERROR('To many rows being processed at one. Reduce and try again.', 16, 1) 
        ROLLBACK 
    END 
END
Run Code Online (Sandbox Code Playgroud)

trigger sql-server t-sql

0
推荐指数
1
解决办法
95
查看次数

如何使 OUTER JOIN 返回零而不是 NULL

我正在尝试在 SQL Server 上完成此操作。带有数据的最简单的表结构如下所示。

Table: Blog

BlogID | Title
-------+--------
  1    | FirstBlog
 23    | Pizza

Table: User

UserID | Name
-------+-----------
123    | james
444    | John

Table: UserBlogMapping

UserBlogMappingID | BlogID | UserID
------------------+--------+------
1                 |    1   |  123
Run Code Online (Sandbox Code Playgroud)

我想在一个 SQL 查询中获取FormIDUserBlogMappingID。如果提供UserID的不在映射表中,则返回零,否则返回有效的userBlogMappingID。我正在尝试运行以下查询,但它不正确。

SELECT 
    B.BlogID, 
    BUM.BlogUserMappingID 
FROM 
    Blog AS B
        LEFT JOIN BlogUserMapping AS BUM ON B.BlogID = BUM.BlogID
WHERE 
    (B.BlogID = 23)  -- it exists in the table
    AND BUM.userID …
Run Code Online (Sandbox Code Playgroud)

join sql-server

-1
推荐指数
1
解决办法
4269
查看次数

sp_BlitzFirst 不适用于 SQL Server 2005

Msg 139, Level 15, State 1, Procedure sp_BlitzFirst, Line 0 [Batch Start Line 3]
Cannot assign a default value to a local variable.
Msg 195, Level 15, State 10, Procedure sp_BlitzFirst, Line 120 [Batch Start Line 3]
'SYSDATETIMEOFFSET' is not a recognized built-in function name.
Msg 195, Level 15, State 10, Procedure sp_BlitzFirst, Line 130 [Batch Start Line 3]
'SYSDATETIMEOFFSET' is not a recognized built-in function name.
Msg 195, Level 15, State 10, Procedure sp_BlitzFirst, Line 135 [Batch Start Line …
Run Code Online (Sandbox Code Playgroud)

sql-server-2005 sp-blitzfirst

-2
推荐指数
1
解决办法
155
查看次数

根据另一个表中的值更新值

我在 DB2 中有一个表(表 A),其中需要根据表 B 中的值更新列。

例如

表 A有两列和以下数据。

 ID    LOGIN
 01    DONALD.TRUMP
 02    BARACK.OBAMA
 03    ABRAHAM.LINCOLN
Run Code Online (Sandbox Code Playgroud)

表B具有以下数据。

 ID    OLDLOGIN            NEWLOGIN
 01    DONALD.TRUMP        DONALD.T
 02    ABRAHAM.LINCOLN     ABRAHAM.LIN
Run Code Online (Sandbox Code Playgroud)

我想更新表 A 的 LOGIN 值,如果它们存在于表 B 的 OLDLOGIN 中,则为它们提供 NEWLOGIN 值。

所以表A中的最终结果应该如下所示

 ID    LOGIN
 01    DONALD.T
 02    BARACK.OBAMA
 03    ABRAHAM.LIN
Run Code Online (Sandbox Code Playgroud)

最简单的方法是什么?

db2

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