小编Pau*_*ite的帖子

在维度中动态定义范围

每次我决定构建一个立方体时,我都会遇到一个问题,但我还没有找到克服它的方法。

问题是如何允许用户自动定义一系列事物,而无需在维度中对它们进行硬编码。我将在一个例子中解释我的问题。

我有一个叫做客户的表:

表结构

这是表中的数据:

数据表

我想以枢轴样式显示数据,并将工资年龄分组在定义的范围内,如下所示:

具有定义范围的数据表

我写了这个脚本并定义了范围:

SELECT [CustId]
      ,[CustName]
      ,[Age]
      ,[Salary]
      ,[SalaryRange] = case
        when cast(salary as float) <= 500 then
            '0 - 500'
        when cast(salary as float) between 501 and 1000 then
            '501 - 1000'
        when cast(salary as float) between 1001 and 2000 then
            '1001 - 2000'
        when cast(salary as float) > 2000 then
            '2001+'
        end,
        [AgeRange] = case
        when cast(age as float) < 15 then
            'below 15'
        when cast(age as float) between …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server ssas pivot

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

为什么表变量强制索引扫描而临时表使用查找和书签查找?

我试图理解为什么使用表变量会阻止优化器使用索引查找然后书签查找与索引扫描。

填充表:

CREATE TABLE dbo.Test 
(
    RowKey INT NOT NULL PRIMARY KEY, 
    SecondColumn CHAR(1) NOT NULL DEFAULT 'x',
    ForeignKey INT NOT NULL 
) 

INSERT dbo.Test 
(
    RowKey, 
    ForeignKey
) 
SELECT TOP 1000000 
    ROW_NUMBER() OVER (ORDER BY (SELECT 0)),
    ABS(CHECKSUM(NEWID()) % 10)     
FROM sys.all_objects s1
CROSS JOIN sys.all_objects s2 

CREATE INDEX ix_Test_1 ON dbo.Test (ForeignKey) 
Run Code Online (Sandbox Code Playgroud)

使用单个记录填充表变量,并尝试通过搜索外键列来查找主键和第二列:

DECLARE @Keys TABLE (RowKey INT NOT NULL) 

INSERT @Keys (RowKey) VALUES (10)

SELECT 
    t.RowKey,
    t.SecondColumn
FROM
    dbo.Test t 
INNER JOIN 
    @Keys k
ON
    t.ForeignKey = …
Run Code Online (Sandbox Code Playgroud)

sql-server optimization sql-server-2008-r2 user-defined-table-type bookmark-lookup

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

为什么在列大小增加后创建索引需要更长的时间?

我们的供应商更改了整个数据库中几乎每一列的列宽。数据库大约 7TB,9000 多个表。我们正在尝试在具有 55 亿行的表上创建索引。在供应商升级之前,我们可以在 2 小时内创建索引。现在需要几天时间。他们所做的是将任何 varchar(xx) 大小增加到 varchar(256)。所以大多数列曾经是 varchar(18) 或 varchar(75) 等。

无论如何,主键由 6 列组成,组合宽度为 126 个字符。现在升级后,主键是 1283 个字符,这违反了 SQL Server 900 个字符的限制。整个表列宽度从 1049 的总组合 varchar 计数变为 4009 的总组合 varchar 计数。

数据没有增加,表不会占用比所有列宽增加之前更多的“空间”,但是创建像索引这样简单的东西的性能现在花费了不合理的时间。

任何人都可以解释为什么当唯一要做的就是增加列的大小时,为什么创建和索引需要这么长时间?

我们尝试创建的索引是非聚集的,因为 pk 是聚集索引。在多次尝试创建索引后,我们放弃了。我认为它运行了 4 或 5 天而没有完成。

我在非生产环境中尝试了这一点,方法是拍摄文件系统快照并将数据库放在更安静的服务器上。

sql-server database-internals

18
推荐指数
2
解决办法
455
查看次数

SQL Server 中每个句子的每个单词的第一个字母只大写

我只想将 SQL 列中每个句子的每个单词的第一个字母大写。

例如,如果句子是:

'我喜欢电影'

然后我需要输出:

《我喜欢电影》

询问:

declare @a varchar(15) 

set @a = 'qWeRtY kEyBoArD'

select @a as [Normal text],
upper(@a) as [Uppercase text],
lower(@a) as [Lowercase text],
upper(left(@a,1)) + lower(substring(@a,2,len(@a))) as [Capitalize first letter only]
Run Code Online (Sandbox Code Playgroud)

在这里,我只在我的专栏中做了大写、小写和大写第一个字母(这里我只放了一个随机单词)。

这是我的结果:

在此处输入图片说明

有没有可能做到这一点?

有没有可能在不使用用户定义的函数的情况下获得结果?

我需要输出 Qwerty Keyboard

sql-server sql-server-2014

18
推荐指数
5
解决办法
9万
查看次数

单行 INSERT...SELECT 比单独的 SELECT 慢得多

给定以下堆表,其中包含 400 行,编号从 1 到 400:

DROP TABLE IF EXISTS dbo.N;
GO
SELECT 
    SV.number
INTO dbo.N 
FROM master.dbo.spt_values AS SV
WHERE 
    SV.[type] = N'P'
    AND SV.number BETWEEN 1 AND 400;
Run Code Online (Sandbox Code Playgroud)

以及以下设置:

SET NOCOUNT ON;
SET STATISTICS IO, TIME OFF;
SET STATISTICS XML OFF;
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
Run Code Online (Sandbox Code Playgroud)

以下SELECT语句在大约6 秒内完成(demoplan):

DECLARE @n integer = 400;

SELECT
    c = COUNT_BIG(*) 
FROM dbo.N AS N
CROSS JOIN dbo.N AS N2
CROSS JOIN dbo.N …
Run Code Online (Sandbox Code Playgroud)

performance sql-server insert execution-plan query-performance

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

使用较小的 varchar 或 nvarchar 大小而不是像 4000 这样的大值会节省任何内容吗?

在将数据导入到 SQL Server 时,人们通常无法考虑导入的字符串字段有多大。我是否可以懒惰地继续对 char 字段定义使用较大的值?如果我花精力寻找合适的 char 字段最大大小,它会对性能和速度产生任何影响吗?

如果重要的话,我有 SQL Server 2016 和 2019。

sql-server datatypes import

18
推荐指数
2
解决办法
4171
查看次数

更新 json 数据类型中的 json 元素

我不知道如何更新 PostgreSQL 9.3 数据类型中的元素。

我的例子:

CREATE TABLE "user"
(
  id uuid NOT NULL,
  password character varying(255),
  profiles json,
  gender integer NOT NULL DEFAULT 0,
  created timestamp with time zone,
  connected timestamp with time zone,
  modified timestamp with time zone,
  active integer NOT NULL DEFAULT 1,
  settings json,
  seo character varying(255) NOT NULL,
  CONSTRAINT id_1 PRIMARY KEY (id)
)
WITH (
  OIDS=TRUE
);
ALTER TABLE "user"
  OWNER TO postgres;
Run Code Online (Sandbox Code Playgroud)

“配置文件”中的 json 部分

CREATE TABLE "user"
(
  id uuid NOT NULL,
  password …
Run Code Online (Sandbox Code Playgroud)

postgresql update postgresql-9.3 json

17
推荐指数
3
解决办法
6万
查看次数

由于文件权限错误而无法启动 MySQL 服务器?

我正在尝试启动服务器,然后通过以下方式修复 root 用户

$ mysql -u root mysql
$mysql> UPDATE user SET Password=PASSWORD('my_password') where USER='root';
$mysql> FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)

但是服务器无法启动:

$ mysqld --skip-grant-tables
2014-10-21 07:18:24 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2014-10-21 07:18:24 1967 [Warning] Can't create test file /usr/local/mysql-5.6.21-osx10.8-x86_64/data/x4430.lower-test
2014-10-21 07:18:24 1967 [Warning] Can't create test file /usr/local/mysql-5.6.21-osx10.8-x86_64/data/x4430.lower-test
2014-10-21 07:18:24 1967 [Note] Plugin 'FEDERATED' is disabled.
2014-10-21 07:18:24 1967 [Note] InnoDB: Using atomics to ref count buffer …
Run Code Online (Sandbox Code Playgroud)

mysql permissions startup

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

死锁报告中“锁定记录但不是间隙等待”的含义

  1. 关于locks rec but not gap waitingTRANSACTION(1)中的含义,哪个是正确的?

    • 已经授予间隙锁,等待聚集索引X锁?
    • 已经授予聚集索引 X 锁,等待间隙锁?
  2. Transaction(1) 中有 31 行。这些行的含义是什么?这是否代表间隙锁定?

     0: len 4; hex 800c20d6; asc     ;;
     ....
     29: SQL NULL;
     30: SQL NULL;
    
    Run Code Online (Sandbox Code Playgroud)

最新检测到的死锁报告

    LATEST DETECTED DEADLOCK
    ------------------------
    2015-09-25 15:27:24 1b8084000


    *** (1) TRANSACTION:
    TRANSACTION 5226928, ACTIVE 0 sec fetching rows
    mysql tables in use 1, locked 1
    LOCK WAIT 31 lock struct(s), heap size 6544, 548 row lock(s)
    MySQL thread id 71, OS thread handle 0x1b45be000, query id 4085356 localhost root Creating …
Run Code Online (Sandbox Code Playgroud)

mysql deadlock

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

删除 Postgres 数据库中的所有数据

我已经从带有--data-only--column-inserts标志的生产服务器创建了一个新的数据库转储,因此在登台服务器上执行还原时,我只有一堆插入语句来插入数据。

pg_dump -h localhost -U adminuser --data-only --column-inserts maindb > maindb.sql
Run Code Online (Sandbox Code Playgroud)

在从生产转储恢复数据之前,如何首先删除登台服务器数据库中的所有数据?

我只想删除所有数据,这样我就不必删除和创建数据库和所有这些东西。我只想删除数据并插入新数据。

由于多种原因,我无法选择删除和​​创建数据库。我将不得不删除所有数据并仅插入,因此无论需要找到如何执行此操作,我都愿意去做,但显然需要帮助才能开始。

我还需要自动化这个过程。将自动“从生产数据库转储数据”,然后“删除暂存数据库上的数据”,然后“将数据恢复到暂存数据库”。我只需要“删除暂存数据库上的数据”部分的帮助。

我在 PostgreSQL 9.5.2 上运行

postgresql pg-dump postgresql-9.5

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