标签: query

MySQL:加入未使用的表时的索引(性能优化问题)

我需要优化以下查询:

SELECT /* [things omitted] */ articles.blogpost_id, articles.id AS articleid
FROM blogposts
JOIN articles ON articles.blogpost_id = blogposts.id
WHERE blogposts.deleted = 0
AND blogposts.title LIKE '%{de}%'
AND blogposts.visible = 1
AND blogposts.date_published <= NOW()
ORDER BY blogposts.date_created DESC
LIMIT 0 , 50
Run Code Online (Sandbox Code Playgroud)

EXPLAIN SELECT 给我以下结果:

id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE articles ALL blogpost_id NULL NULL NULL 6915 Using temporary; Using filesort
1 SIMPLE blogposts eq_ref PRIMARY PRIMARY 4 articles.blogpost_id 1 Using where
Run Code Online (Sandbox Code Playgroud)

为什么它先是文章,然后是博客文章?是因为博客文章有更多条目吗?以及如何改进查询以便文章帖子可以使用索引? …

mysql performance index query optimization

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

最好使用 TSQL 或 C# 完成日期对齐和配对匹配提取吗?

首先:我的头衔很烂,所以帮我找出一个新的?

我不能在这里发布所有的 SQL(超过 30k 个字符),所以我把它贴在了pastebin.com

问题:

我得到一个 XML 文件,我从中抓取了一些记录,我需要从记录中提取一些数据并建立另一个表。这些记录是关于一个事件的发生和发生,我已经在 pastebin 中包含了示例数据以进行重新创建。没有看到数据,很难解释。我已经提供了从我的示例导入中获得的所有数据,这些数据应该足以构建应用程序,但我没有得到比数据中显示的更多的信息。

我会给你一点时间看一眼数据,所以这是有道理的。

所以我需要做的是:对于每个“关闭”事件,我需要将它与下一个“开启”事件相匹配,最后我需要有两张桌子,一张桌子用于“历史事件”,一张桌子为“时事”。但是,如果我能正确构建“历史事件”,我就可以弄清楚如何从中获取“当前事件”。

商业规则:

如果在“on”事件之前收集了两个或更多“off”事件,请保留最旧的“off”事件。如果在“关闭”事件之前收集了两个或更多“开启”事件,则保留最新的“开启”事件。如果有一个完整的对,把它们放在历史表中。如果有一个“关闭”事件而不是一个“开启”事件,把它放在当前表中(所以如果我想继续从这个表中插入/删除,那也很好)。如果当前表中已经存在“关闭”事件,我可以将其移动到历史表中以读取“开启”事件(这将需要稍后实施,但如果我可以匹配配对最初我现在可以继续前进。

我认为这就是逻辑。我的想法是弄清楚如何在 SQL 中执行此操作,或者将其推送到用 C# 编写的应用程序,并使用 C# 中的一些临时列表来执行此操作,并构建我需要用于...下一个逻辑的内容。这在 C# 中可能要容易得多,但我感觉 SQL 可以像 C# 一样轻松地完成这项工作,所以我需要 dba 大师的一些帮助。

我的查询已经不起作用,但这就是我在周五回家之前开始的地方,从那时起我一直在考虑它,并构建一个我可以在网上发布的示例问题(以及整个生活你也知道)。数据是实时数据且准确无误,除了 ID 被匿名化并且文本字段更改为易于使用的内容。

这是一个电子表格,大致显示了我希望数据在最后的样子以及现在的样子。有当前数据(为了清晰起见,每个ID之间有一个间隔行),历史表中的数据(与原始数据的ID对齐以便理解)和当前表(再次对齐)。我希望这可以帮助澄清业务规则。 https://spreadsheets.google.com/ccc?key=0AuvCdeHuVU5ddHRCNkpuWHBUREpRajlmLU5VX2xsWnc&hl=en&authkey=COq7y50H

所以完整的 SQL 包括 tabledefs 和当前(非常不正确的)查询在 pastebin http://pastebin.com/k2f2CLnQ

sql-server-2008 query

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

如何获取默认语言的文本

我有这样的表: 在此处输入图片说明

因此语言表中的数据:

在此处输入图片说明

因此文本表中的数据: 在此处输入图片说明

我必须返回请求语言的文本(如果存在)默认语言的文本(如果它不存在)。是否可以在一个查询中做到这一点(不while,拜托)?

代码:

DECLARE @CommentId  bigint = 1
--DECLARE @LanguageCode  nvarchar(2) = 'en' -- "english text" returns
DECLARE @LanguageCode  nvarchar(2) = 'ua'   -- nothing at this moment

SELECT
     t.CommentId
    ,t.TextId
    ,t.[Text]
    ,t.LanguageId
    ,RequestedLanguageId = @LanguageCode
FROM dbo.common_Text t 
    INNER JOIN dbo.common_LanguageType l 
        ON t.LanguageId = l.LanguageId
WHERE l.Code = @LanguageCode 
    AND t.CommentId = @CommentId
Run Code Online (Sandbox Code Playgroud)

谢谢你。

添加:

如果代码请求“ua”(乌克兰语)文本,而这不是该语言的任何文本,那么它将搜索俄语文本。如果找到 - 好的,如果没有,它将寻找英文文本。语言列表可能会有所不同。

sql-server-2008 query cte t-sql

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

sql server ,默认为所有查询设置N前缀为unicode

ms sql server 中是否有任何选项为我的数据库使用 N 前缀。我的应用程序中有很多查询,其中没有一个对 nvarchar 字段使用 N 前缀,现在我必须为所有这些查询设置 N,这需要很长时间。我的校对是 Persian_100,它需要 unicode(N 前缀)所以任何建议表示赞赏

select * from table1 where field1=N'????' ;
Run Code Online (Sandbox Code Playgroud)

我想在我的查询中跳过 N 前缀,但它充当所有类型查询的 unicode:

sql-server query c#

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

树节点计算 - SQL Server

我很感激我正在努力实现的一些帮助。

我公司制造的零件是由子组件和子组件的子组件构建的。这看起来像:

             1
         /   \  \
        /     |   \
       2      3    7
      / \    / \
     4   5  4   6
Run Code Online (Sandbox Code Playgroud)

4 和 5 组合成 2,4 和 6 组成 3,然后组件 2、3 和 7 组成 1。

我的桌子看起来像这样;

+------+-----+-------+----------+----------------+
| ROOT | SUB | LEVEL | LEADTIME | TOP LEVEL PART |
+------+-----+-------+----------+----------------+
|    1 |   1 |     0 |        4 |              1 |
|    1 |   2 |     1 |        2 |              1 |
|    1 |   3 |     1 |        5 …
Run Code Online (Sandbox Code Playgroud)

sql-server query recursive

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

从起始范围选择所有重叠范围

我的问题与这个问题类似,(我认为)有足够大的差异。我有一个基本范围,我想在一个表中找到所有其他范围与它和彼此冲突。或者更确切地说是形成范围的项目,但它并没有真正产生影响。

带星号的那一行是起始范围。范围 1,2 和 3 是应该扩展它的范围。结果范围应该是 X。

1 | 
3 |    ===1====            ====
5 | ==2==    ====*====           ====
6 |             ====3====     =====          
--+-------------------------------------
  | |<--------X-------->|
Run Code Online (Sandbox Code Playgroud)

我写过这个:

WITH   cte
AS (
    SELECT DATA1.ID, DATA1.STARTDATE, DATA1.ENDDATE
    FROM DATA1
    WHERE 
    DATA1.ID = @PARID AND 
    DATA1.STARTDATE > @STARTDATE AND 
    DATA1.ENDDATE < @ENDDATE 

    UNION ALL

    SELECT DATA1.ID, DATA1.STARTDATE, DATA1.ENDDATE
    FROM cte 
    INNER JOIN DATA1 ON (DATA1.ID = cte.ID)
    WHERE 
    DATA1.ID = @PARID AND 
    (cte.STARTDATE < DATA1.ENDDATE AND cte.ENDDATE > DATA1.ENDDATE)
) …
Run Code Online (Sandbox Code Playgroud)

sql-server query interval

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

查询所有 Postgres 配置参数的当前值?

您可以通过手动编辑文件或调用命令来为 Postgres设置各种配置参数。这是编写设置的两种途径,但是阅读呢?postgresql.confALTER SYSTEM

? 有没有办法查询所有当前设置?

我知道客户端身份验证配置文件中的设置pg_hba.conf可以通过读取pg_hba_file_rules来看,是这样的:table pg_hba_file_rules ;。有类似的东西postgresql.conf吗?

postgresql query configuration

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

值重置之间的累积持续时间

--DROP TABLE Taco_Val;
CREATE TABLE Taco_Val
(
    ID          INT IDENTITY(1,1),
    AuditID     VARCHAR(5),
    CreditID    VARCHAR(10),
    TS          DATETIME,
    Val         BIT
);

INSERT INTO Taco_Val
VALUES
 ('a1', 1, '2018-08-09 19:24:39.823',   1),--> Started 
 ('ac', 1, '2018-08-09 20:53:07.273',   0),
 ('as', 1, '2018-08-09 21:04:40.670',   0),
 ('a9', 1, '2018-08-09 21:14:17.660',   1),--> Another Seq
 ('av', 1, '2018-08-09 21:38:56.910',   1),
 ('ad', 1, '2018-08-09 21:48:46.180',   1),
 ('an', 1, '2018-08-09 22:00:15.650',   0),
 ('a4', 1, '2018-08-09 22:08:26.517',   1),-->Another Seq
 ('a8', 1, '2018-08-09 22:16:16.253',   0),
 ('a3', 1, '2018-08-09 22:16:24.247',   1),-->Another Seq
 ('ai', 1, …
Run Code Online (Sandbox Code Playgroud)

sql-server query sql-server-2012 running-totals

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

是否有“软” ORDER BY / GROUP BY?

SQL-小提琴

http://sqlfiddle.com/#!9/c82c87b/1

表定义

首先,这是我的表:

 CREATE TABLE `stackoverflow` (
`id` VARBINARY( 36 ) NOT NULL COMMENT 'GUID generated by PHP',
`time` TIME NOT NULL COMMENT 'Current time(stamp)',
`type` VARCHAR( 10 ) NOT NULL COMMENT 'start/stop',
`reference` VARBINARY( 36 ) NOT NULL COMMENT 'multiple starts/stops to one reference',
PRIMARY KEY ( `id` )
) ENGINE = MYISAM 
Run Code Online (Sandbox Code Playgroud)

数据

这是一些示例数据:

INSERT INTO `stackoverflow` (
`id` ,
`time` ,
`type` ,
`reference`
)
VALUES 
('03bd8e91-b9aa-4d18-be47-9e9cce903cfd', '11:00:00', 'start', '76afe924-08aa-431b-904a-66290c50da6a'), 
('ef10860a-7666-4ca0-95b6-79ef2d5b3f75', '11:01:00', 'start', 'fd064ef5-462f-489c-ae14-3cb766eb80c4'), 
('9bc72e24-a0d4-43a3-86ab-973c331e2958', '11:02:00', …
Run Code Online (Sandbox Code Playgroud)

mysql query order-by mysql-5.1

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

从查找值生成宽表

我有一张宽桌子,看起来像这样:

Table Windspeed
Timestamp           A-004   A-005a  A-006a ... (column 161) E-009
09-Apr-19 00:00:00  13.09   13.95   10.16                   11.71
09-Apr-19 00:05:00  12.17   11.98   12.54                   10.66
Run Code Online (Sandbox Code Playgroud)

我需要以相同的格式生成一个新表,但替换查找表中的列值,如下所示:

Table Powercurve
WindSpeedBin    Power_WdSpd Turb_Num
...
9.5             1216.9      1
10              1362.9      1
10.5            1476.3      1
11              1597        1
11.5            1701.5      1
12              1798.3      1
12.5            1828.5      1
13              1840        1
13.5            1846.1      1
...
9.5             1211.9      2
10              1342.9      2
10.5            1436.3      2
11              1517        2
11.5            1691.5      2
12              1713.3      2
12.5            1801.5      2
13 …
Run Code Online (Sandbox Code Playgroud)

sql-server query

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