标签: null

mysql InnoDB 中的许多 NULL 列是否有害?

在探索 InnoDB 的聚集 B 树索引系统时,我认为许多 NULL(或小)列的存在对 InnoDB 性能没有显着影响。

多余列的存在是否会降低 mysql 的性能?

PS我尝试了实际测试,但没有显着效果。不过我觉得应该是在重载的情况下比较的。这就是我很想了解关于这件事的技术推理的原因。

mysql innodb mysql-5 performance null

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

将“NULL”字符串更新为实际的 NULL 值

我有一个包含 NULL 值的表,但问题是某些值实际上是字符串“NULL”而不是实际的 NULLS,因此当您尝试类似

where date is null
Run Code Online (Sandbox Code Playgroud)

它不会返回具有“NULL”字符串的字段。

我需要做的是运行整个表的更新,将所有字符串“NULLS”转换为实际的 NULL 值。“NULL”字符串出现在表的所有列中,因此需要更新的不仅仅是 1 列。我不确定如何处理这种情况。我想我可能需要使用循环,因为我有很多列,但同样可能有一个简单的解决方案而不必使用循环。解决此问题的最佳方法是什么?

null sql-server

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

“无法插入NULL值”,但是没有NULL值!

这个问题遵循我的另一个问题的答案: 插入与子查询表相关的输出

Person.LastName 列有一个 NOT NULL 约束。当我执行此代码时:

CREATE TABLE tempIDs
( PersonId INT, 
  FinancialInstitutionId INT
);

MERGE INTO Person 
USING FinancialInstitution AS fi
  ON 1 = 0
WHEN NOT MATCHED THEN
  INSERT (CreationDate, AdministrativeStatus, LastName, Street1, Number1, City1, State1, PostCode1, CountryId1, WorkDirectPhone1, Fax1, Email1)
  VALUES (GetDate(), 'Legal', fi.Name, fi.Street, fi.Number, fi.City, fi.[State], fi.PostCode, fi.CountryId, fi.PhoneNumber, fi.Fax, fi.Email)
OUTPUT inserted.Id, fi.Id INTO tempIDs;

UPDATE fi
SET fi.PersonId = t.PersonId
FROM FinancialInstitution AS fi
  JOIN tempIDs AS t
    ON fi.Id = t.FinancialInstitutionId …
Run Code Online (Sandbox Code Playgroud)

null sql-server

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

SQL Server Left Join 奇怪的 NULL 检查

我刚刚经历了一些旧的存储过程,做了一些优化,偶然发现了这个奇怪的地方:

SELECT ISNULL(bt.BusinessTypeID, 0) AS BusinessTypeID
FROM BusinessType bt
LEFT JOIN Business b
     ON b.BusinessTypeID = ISNULL(bt.BusinessTypeID, NULL)
Run Code Online (Sandbox Code Playgroud)

这是一个稍微简化的版本,但第 4 行是有问题的行。我无法想象这有什么作用?我已经检查了带有和不带有此 NULL 检查的 exec 计划和​​结果,一切似乎都一样。

这只是完全的疯狂还是有一些模糊的原因为什么离开它可能是有益的?

更新:

为了回应评论,在下面添加了完整的查询(匿名),在这个完整版本中,这ON Object4.Column9 = Function4(Object1.Column4, ?)对应于这个ON b.BusinessTypeID = ISNULL(bt.BusinessTypeID, NULL)。另外 Object4.Column9 是一个可以为空的外键 & Object1.Column4 是一个不可为空的主键

SELECT Function1() AS Column1,
Function2(Function3(Function2((
    SELECT Column2 AS Column3
    FROM 
    (
            SELECT ? AS Column4,
                ? AS Column2
            WHERE (Variable1 IS NULL OR ? = Variable1)

            UNION ALL

            SELECT Function4(Object1.Column4, ?) AS Column4,
                Function4(Object1.Column5,?) + …
Run Code Online (Sandbox Code Playgroud)

null sql-server sql-server-2008-r2

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

在包含 NULL 的列上使用 GROUP BY WITH ROLLUP

我有下表(在 SQL Fiddle 上查看)(我创建是为了解决我的问题):

| ID | word    |
----------------
| 5  | "Hello" |
| 6  |  NULL   |
| 7  | "World" |
| 8  | "World" |
Run Code Online (Sandbox Code Playgroud)

现在我想使用GROUP BY word WITH ROLLUP. ROLLUP 生成的行的列 word 中的 NULL 应替换为“total”:

SELECT
  ID,
  ifnull(word, "total") as word,
  count(*) as occurrences
FROM test
GROUP BY word WITH ROLLUP;
Run Code Online (Sandbox Code Playgroud)

问题是它还会用NULL单词为 NULL 的行数替换记录中的 :

| ID |  word | occurrences |
|----|-------|-------------|
|  6 | total | …
Run Code Online (Sandbox Code Playgroud)

mysql null group-by

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

如何在 PostgreSQL 中将 NOT NULL 列设置为 NULL?

我是 PostgreSQL 的新手,这就是我问这个问题的原因。我有一个表app_client_users和一个名为client_id. 最初我将其设置为NOT NULL,现在我想将其更改为允许 NULL。我试过了

alter table app_client_users alter column client_id int  NULL ;
Run Code Online (Sandbox Code Playgroud)

alter table app_client_users alter column client_id   NULL ;
Run Code Online (Sandbox Code Playgroud)

这是行不通的。我该如何解决?

postgresql null alter-table

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

检查数组列的约束以验证长度 > 0

我正在使用 postgres 表验证规则并尝试CHECK为数组列设置约束。一个想法是只允许长度 > 0 的数组。

这是我想要实现它的方式:

create table words_table (
  id serial primary key, 
  words varchar(20)[] CHECK (array_length(words, 1) > 0)
);
Run Code Online (Sandbox Code Playgroud)

但看起来它不起作用。o_o

insert into words_table (words) values ('{}');
//INSERT 0 1
Run Code Online (Sandbox Code Playgroud)

如何实现这样的约束?

postgresql null constraint check-constraints

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

加入 NULL 键列优化为表和索引扫描

我有一个关于这个查询计划的问题。

我们在测试环境中有一个表 Order_Details_Taxes,它有 11,225,799 行。该表有一个列 OrdTax_PLTax_LoadDtl_Key,它在每一行上都是 NULL。此测试环境的配置方式使此列始终为 NULL。此列上有一个索引。

我使用列的 NULL 值对该表运行了一些查询。NULL INNER JOIN 永远不会产生任何结果。

declare @Keys table (KeyValue decimal(15,0))
insert into @Keys (KeyValue) values (null)

select OrdTax_PLTax_LoadDtl_Key
from @Keys
inner join Order_Details_Taxes
    on OrdTax_PLTax_LoadDtl_Key = KeyValue

select *
from @Keys
inner join Order_Details_Taxes
    on OrdTax_PLTax_LoadDtl_Key = KeyValue
Run Code Online (Sandbox Code Playgroud)

这些是查询计划中的第一个查询。第一个select从亿行表开始并连接到@Keys。第二个select从@Keys 开始,但它对这个表进行聚集索引扫描。

我知道在大多数情况下临时@Tables 是有问题的,所以我将查询更改为使用临时 #Table:

if object_id ('tempdb..#Keys') is not null
    drop table #Keys
create table #Keys (KeyValue decimal(15,0))
insert into #Keys (KeyValue) values (null)

select OrdTax_PLTax_LoadDtl_Key …
Run Code Online (Sandbox Code Playgroud)

null join sql-server execution-plan sql-server-2014

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

NULL 值导致 SELECT 结果中的空白行用于文本连接

我有一个查询,用于生成一些文本以创建一些 VALUES 文本以放入 .sql 文件以插入一些行。我在结果中得到一个空行:

postgres=# SELECT '  (' || obj_id || ', ''' || obj_type || '''),' FROM il2.objects WHERE obj_id < 11 ORDER BY obj_id;
        ?column?         
-------------------------
   (1, 'ScienceDomain'),

   (3, 'PIs'),
   (10, 'Instrument'),
(4 rows)
Run Code Online (Sandbox Code Playgroud)

执行 a select *,很明显它是由obj_typeNULL 为obj_id2引起的:

postgres=# SELECT * FROM il2.objects WHERE obj_id < 11;
 obj_id |   obj_type    
--------+---------------
     10 | Instrument
      1 | ScienceDomain
      2 | 
      3 | PIs
(4 rows)
Run Code Online (Sandbox Code Playgroud)

(确认它是NULL):

postgres=# SELECT * FROM il2.objects WHERE …
Run Code Online (Sandbox Code Playgroud)

postgresql null select concat

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

为什么 ORDER BY NULLS LAST 会影响主键上的查询计划?

使用 PostgreSQL 11,我有下表,大约有 4.5 亿行:

postgres=> \d+ sales
                                                             Table "public.sales"
              Column               |            Type             |             Modifiers              | Storage  | Stats target | Description
-----------------------------------+-----------------------------+------------------------------------+----------+--------------+-------------
 created_terminal_id               | integer                     | not null                           | plain    |              |
 company_id                        | integer                     | not null                           | plain    |              |
 customer_id                       | integer                     |                                    | plain    |              |
 sale_no                           | character varying(20)       | not null                           | extended |              |
 sale_type                         | smallint                    | not null                           | plain    |              |
 source_type                       | smallint                    | not null                           | plain …
Run Code Online (Sandbox Code Playgroud)

postgresql index null order-by execution-plan

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