使用标准 SQL 数据库(目前主要使用 MySQL)有点新,我还没有遇到过很多这样的用法。
什么时候以及为什么使用负(或者更确切地说是有符号的)键来索引一个表是有用的?
我有一个日志表,用于捕获某些文件何时导出到另一个系统的日期时间戳。
导出的日志表目前有三个字段:
id (primary key)
messageId (int)
exportedDateTime (datetime)
Run Code Online (Sandbox Code Playgroud)
回顾这一点,我发现该id字段没有任何用处,因为没有连接到该表。在这个表上唯一的工作是插入处理消息的批处理作业并插入到这个日志表中。
我应该删除该id字段吗?
我是否应该在任何一个主键messageId或exportedDateTime或两者兼而有之?
Microsoft SQL Server 提供了NEWID生成新 GUID(UUID的 Microsoft 版本)值的命令,该值可用作主键值(在其uniqueidentifier数据类型中)。这些本质上不是顺序的,因此更新索引可能效率低下。
或者,MS SQL Server 提供该NEWSEQUENTIALID命令。引用他们的文档:
创建一个 GUID,该 GUID 大于自 Windows 启动以来此函数在指定计算机上先前生成的任何 GUID。重新启动 Windows 后,GUID 可以从较低的范围再次启动,但仍然是全局唯一的。当 GUID 列用作行标识符时,使用 NEWSEQUENTIALID 比使用 NEWID 函数更快。这是因为 NEWID 函数会导致随机活动并使用较少的缓存数据页。使用 NEWSEQUENTIALID 还有助于完全填充数据和索引页。
有没有办法在 Postgres 中获得更有效索引的 UUID?
我有一个带有复合主键(由 4 列组成)的表,用于确保没有重复项输入到表中。我现在需要一个新表,它需要将此表中的键作为外键引用。
我的问题是哪种方法对查找速度更有效:
1)我是否创建包含所有 4 列的新表并在外键中引用它们。
或者
2)我是否在主键表中创建一个新的标识列并将其用作新表中的外键。
预计该数据库将保存大量数据,因此我一直构建它,以期最大限度地减少每个表中保存的数据量。考虑到这一点,选项 2 将是最好的方法,因为我将为每一行保存 2 个 int 列和一个 datetime 列,但我想避免在不必要的情况下增加查找时间。
sql-server-2008 database-design primary-key identity composite-types
我正在查看我继承的应用程序的 SQL Server 数据库。我已经有大约 10 年没有研究过 SQL Server,所以请耐心等待。
我正在查看的数据库表有一个bigint NOT NULL名为的列id,但是,当我检查约束时,我没有看到任何约束,所有数据库表也是如此。
我是否正确假设这些表上没有主键和索引(集群或非集群)?
我运行了以下查询,结果似乎证实了我的怀疑:
//**returns 0**
select count(*) from INFORMATION_SCHEMA.TABLE_CONSTRAINTS;
//**returns no rows**
select * from sys.indexes
where object_id = (select object_id from sys.objects where name = 'NAME-OF-TABLE');
//**returns all tables in database**
SELECT name
FROM sys.tables
WHERE OBJECTPROPERTY(object_id,'IsIndexed') = 0;
Run Code Online (Sandbox Code Playgroud) 我正在阅读一些现实生活中的数据库问题,一个项目有一个 1 亿行多的表,其中有 5 列作为其主要内容。我认为这很糟糕,但谁能告诉我究竟是为什么?
该表是一种微型汇总/聚合表,因此 5 列类似于(day、market_id、product_id...)。起初我认为一个 5 列的主键并不理想,但我越想,我真的想不出一个很好的理由为什么它很糟糕。
这是与一半的公司工程师进行的深夜讨论。刚刚有人提到这是一个糟糕的设计,一位高级工程师表示同意,但没有人真正了解原因。因此试图为自己研究这件事!
我们可以声明一个Identitylikeid_num来id_num增加唯一的数字。
CREATE TABLE new_employees
(
id_num int IDENTITY(1,1),
fname varchar (20),
minit char(1),
lname varchar(30)
)
Run Code Online (Sandbox Code Playgroud)
是否建议将其Identity用作替代方案,Primary key因为Identity为每一行提供了唯一编号?
我是数据库的新手。我四处阅读并发现使用电子邮件地址作为主键可能不是一个好主意,因为字符串比较速度较慢,这会影响复杂连接中的性能,如果电子邮件发生变化,我必须更改所有需要很多的外键的努力。
但是如果我的用户表要求每个用户都有一个电子邮件地址并且每个电子邮件地址都应该是唯一的,那么在电子邮件列上添加一个唯一索引就足够了吗?因为 afaik 唯一字段允许空值,而我要求每个用户都有一个电子邮件地址,不允许空值。有什么我在这里想念的吗?或者我想使电子邮件列唯一并确保在服务器上的数据验证期间用户确实输入了一个电子邮件地址,以便每个用户都有一个?
我已经看到大量查询来列出主键和外键,但是如何查询缺少主键的表?
是否可以将多个字段作为范围键?
假设我有一个表,其中每一行都由 <A,B,C>
-------------------------------
A | B | C | D | E |
-------------------------------
Run Code Online (Sandbox Code Playgroud)
A主hash键在哪里
我想B和C作为主range键。
如何在 DynamoDB 中将超过 2 个字段作为主键?
primary-key ×10
postgresql ×3
identity ×2
index ×2
sql-server ×2
constraint ×1
dynamodb ×1
logs ×1
mysql ×1
uuid ×1