数据库管理员

希望提高数据库技能并向社区中的其他人学习的数据库专业人员的问答

4
MySQL中的“ CREATE INDEX”是线性运算吗?
我的意思是: 如果使用以下命令在表上创建索引 n行需要花费t时间。在同一张表上创建索引1000*n大约需要花费1000*t时间。 我要实现的目标是通过在更小的测试数据库上创建相同的索引来估计在生产数据库上创建索引所需的时间。
20 mysql  index 

5
监视SQL Server数据库状态的最佳查询是什么?
我希望能够运行查询以获取有关数据库状态的关键信息。即,我希望查询能够判断数据库是否处于良好状态。 这是我为此检查继承的查询: SELECT name AS [SuspectDB], DATABASEPROPERTY(name, N'IsSuspect') AS [Suspect], DATABASEPROPERTY(name, N'IsOffline') AS [Offline], DATABASEPROPERTY(name, N'IsEmergencyMode') AS [Emergency], has_dbaccess(name) AS [HasDBAccess] FROM sysdatabases WHERE (DATABASEPROPERTY(name, N'IsSuspect') = 1) OR (DATABASEPROPERTY(name, N'IsOffline') = 1) OR (DATABASEPROPERTY(name, N'IsEmergencyMode') = 1) OR (has_dbaccess(name) = 0) 如果该查询返回任何结果,则假定数据库处于可疑状态或潜在的不良状态。 有一个更好的方法吗?

5
在T-SQL中使用IF会削弱还是破坏执行计划的缓存?
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 7年前。 有人向我建议,在t-SQL批处理中使用IF语句会降低性能。我试图找到一些确认或验证此断言。我正在使用SQL Server 2005和2008。 断言是以下批处理: IF @parameter = 0 BEGIN SELECT ... something END ELSE BEGIN SELECT ... something else END SQL Server无法重新使用生成的执行计划,因为下一次执行可能需要其他分支。这意味着SQL Server将基于执行当前可以确定需要哪个分支的基础,从执行计划中完全消除一个分支。这是真的吗? 另外在这种情况下会发生什么: IF EXISTS (SELECT ....) BEGIN SELECT ... something END ELSE BEGIN SELECT ... something else END 无法提前确定执行哪个分支的地方?


2
如何最好地在PostgreSQL中存储时间戳?
我正在研究PostgreSQL数据库设计,我想知道如何最好地存储时间戳。 假设条件 不同时区的用户将数据库用于所有CRUD功能。 我看了两个选项: timestamp NOT NULL DEFAULT (now() AT TIME ZONE 'UTC') bigint NOT NULL DEFAULT 因为timestamp我会发送一个字符串,该字符串代表INSERT时刻的确切(UTC)时间戳。 因为bigint我会以数字格式存储完全相同的内容。(时区问题是在将毫秒移交给服务器之前处理的,因此始终在UTC中使用毫秒。) 存储a的一个主要优点bigint是可以更容易存储和检索,因为传递正确格式的时间戳比简单的数字(自Unix Epoc以来的毫秒数)要复杂得多。 我的问题是,哪种方法可以进行最灵活的设计,以及每种方法的陷阱是什么?



2
在SQL Server中检测锁定的表或行
我正在尝试了解/学习如何跟踪被阻止会话的详细信息。 因此,我创建了以下设置: create table foo (id integer not null primary key, some_data varchar(20)); insert into foo values (1, 'foo'); commit; 现在,我从两个不同的客户端两次连接到数据库。 第一届会议: begin transaction update foo set some_data = 'update' where id = 1; 我明确地不承诺在那里保留锁。 在第二届会议上,我发表了同样的声明,当然还有人由于锁定而等待。现在,我尝试使用不同的查询浮动,以查看会话2正在等待foo表。 sp_who2 显示以下内容(我删除了一些列以仅显示重要信息): SPID | 现状 BlkBy | DBName | 指令| SPID | 要求 ----- …

4
SQL Server 2012还原向导冻结
我有一台带有SSMS Express 2012的开发笔记本电脑,带有2012数据库实例和2008数据库实例。已经使用此配置超过一年了。突然我无法使用还原向导。该向导将选择备份文件,但是当我选择左上方的“文件”选项以指定MDF和LDF的位置时,对话框将挂起。我尝试过维修,没有运气。
20 sql-server 


1
数据库设计:同一张表具有两个一对多关系
我必须对一种情况建模,即我有一个表Chequing_Account(包含预算,IBAN号和其他帐户详细信息),该表必须与两个不同的表Person和Corporation都可以具有0、1或许多支票帐户。 换句话说,我在同一个表中有两个一对多关系 我想听听尊重标准化要求的解决方案。我听到的大多数解决方案是: 1)找到一个人和公司都属于的公共实体,并在此实体和Chequing_Account表之间创建一个链接表,在我的情况下这是不可能的,即使我要解决一般问题而不是此特定实例也是如此。 2)创建两个链接表PersonToChequingAccount和CorporationToChequingAccount,它们将两个实体与Chequing Accounts关联起来。但是,我不希望两个人拥有相同的支票帐户,也不想让自然人和公司共享一个支票帐户!看到这张图片 3)在Chequing Account中创建两个指向公司和自然人的外键,但是我要强制一个人和Company可以有许多支票帐户,但是我必须手动确保对于每个ChequingAccount行,不是两个关系都指向公司和自然人,因为支票帐户是公司还是自然人。看到这张图片 是否有其他更清洁的解决方案来解决此问题?

1
此NO JOIN PREDICATE警告应该让我感到震惊吗?
我正在对性能不佳的存储过程的细节进行故障排除。该过程的这一部分将引发NO JOIN PREDICATE警告 select method = case methoddescription when 'blah' then 'Ethylene Oxide' when NULL then 'N/A' else methoddescription end, testmethod = case methoddescription when 'blah' then 'Biological Indicators' when NULL then 'N/A' else 'Dosimeter Reports' end, result = case when l.res is null or l.res <> 1 then 'Failed' …


3
将PostgreSQL数据移动到其他驱动器
我正在使用AWS作为我的云环境。我将PostgreSQL与根实例卷安装在同一驱动器上。我已将第二个驱动器连接并安装到我的实例。现在,我想将所有PostgreSQL数据移动到其他驱动器。我仍处于开发模式,因此如果此时可以简化传输,则可以删除旧数据。做这个的最好方式是什么? 我应该看看PostgreSQL表空间吗?

2
MSSQL $ SQLEXPRESS的NTFS权限损坏
我一直在“保护”我们的数据库服务器。为此,我从SQL Express安装创建的文件夹中删除了一些权限。 D:\SQL D:\SQL\Data D:\SQL\Backup etc.. 我将权限保留在Data文件夹中,但从其他文件夹中删除了我认为不需要的所有内容。 现在我无法备份数据库。如果我尝试选择备份位置,则对话框不会在d:\ SQL文件夹中显示任何内容,如果我将路径放在自己的位置,它会告诉我:- 无法访问服务器上的指定路径或文件。验证您具有必要的安全特权,并且路径和文件存在。 ... 看来是文件夹权限问题。以类似方式配置的另一台服务器对名为“ MSSQL$SQLEXPRESS” 的帐户具有一堆“允许”权限(我知道我已删除),但是由于没有这样的group,user或build,我无法重新添加这些权限-服务器上的安全性原则。 如何为此MSSQL$SQLEXPRESS帐户添加权限?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.