小编Roh*_*pta的帖子

具有高选择性和低选择性字段的复合索引顺序中的字段顺序

我有一个超过 30 亿行的 SQL Server 表。我的一个查询需要很长时间,所以我正在考虑优化它。查询如下所示:

SELECT [Enroll_Date]
      ,Count(*) AS [Record #]
      ,Count(Distinct UserID) AS [User #]
  FROM UserTable
  GROUP BY [Enroll_Date]
Run Code Online (Sandbox Code Playgroud)

[Enroll_Date] 是具有少于 50 个可能值的低选择性列,而 UserID 列是具有超过 2 亿个不同值的高选择性列。根据我的研究,我认为我应该在这两列上创建一个非聚集复合索引,理论上高选择性列应该是第一列。但我不确定在我的情况下,这是否有效,因为我在 group by 子句中使用了低选择性列。

该表没有聚集索引。

index sql-server nonclustered-index

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

WAL 数据库登录在 RAID10 上的单独磁盘上是个好主意吗?

我有一个 RAID10 服务器,并且 Postgres 将日志(pg_xlog aka WAL)写入同一个 RAID10 阵列。

我在带有大缓冲区的同步模式下使用 WAL 并执行大量批量插入和更新,因此希望可以使用该缓冲区。

将日志拆分到一个额外的磁盘上而不是在 raid10 中是个好主意吗?我可以用 2 个磁盘在 RAID 中填充内容,但这真的会改善什么吗?

我期待有人能说出一些优点和缺点。

postgresql

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

如何在 ssms 2012 中将 CTRL+F1 分配给 sp_whoisactive?

当我转到“工具”>“选项”>“环境”>“键盘”并
键入 Query.Sp_whoisactive 时,
按快捷键:Ctrl+F1
单击“分配”。

当我按Ctrl+ 时F1,它仍然调用帮助。

ssms sql-server-2012

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

使用索引的“ORDER BY column=value”(无全表扫描)

我正在尝试破解一个名为 Phabricator / Phorge 的 FLOSS 应用程序

让我们看一下这个简单的 MySQL 表,它按 ID 及其状态( 、 等)存储一些open问题:closedinvalid

CREATE TABLE `ponder_question` (
  `id`         int(10) unsigned NOT NULL AUTO_INCREMENT,
  `status` varchar(32)          NOT NULL,
  PRIMARY KEY   (`id`),
  KEY `status`  (`status`),
Run Code Online (Sandbox Code Playgroud)

我想先按特定状态排序,然后再按其他状态排序。所以:

SELECT * FROM ponder_question
  ORDER BY status='open' DESC
  LIMIT 5
Run Code Online (Sandbox Code Playgroud)

它有效,但请考虑这一点DESCRIBE。该查询显然正在检查 5000 行,这可能太多了/它正在进行全表扫描:

ID 选择类型 桌子 分区 类型 可能的键 钥匙 密钥长度 参考 过滤的 额外的
1 简单的 思考问题 无效的 指数 无效的 地位 130 无效的 5000 100.00 使用索引;使用文件排序

(相反,如果你EXPLAIN …

mysql order-by

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