数据库管理员

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

1
有没有一种好的方法可以为postgres表中的每个记录运行触发器?
我有一个无法控制某些表设计的系统(通过Slony-I复制),所以我有一系列我们称为“影子表”的系统,在其中我从复制表中提取了一些信息,并将其存储在所需的已处理表单中,同时去除要忽略的记录。 现在,设置新副本后,我运行更新并将其值设置回自身(例如UPDATE tablename SET field=field),以强制触发器运行,但是其中一些表是数百万条记录,并且在增长,并且可能需要30分钟。(然后还有真空)。 有没有更好的方法来触发它,或者有某种方式编写一个函数以使其能够与传入的输入或NEW依赖于调用上下文一起工作?我不愿意保留两个不同的功能,因为我已经看到太多次更新了一个功能,而另一个没有更新。

3
LIKE如何实施?
谁能解释一下LIKE运算符如何在当前数据库系统(例如MySQL或Postgres)中实现?还是让我参考一些解释它的参考文献? 天真的方法是检查每条记录,在感兴趣的字段上执行正则表达式或部分字符串匹配,但是我有一种感觉(希望),这些系统做得更聪明。

2
对于每种类型的查询,我都需要单独的索引,还是一个多列索引可以工作?
我已经有点知道这个问题的答案了,但是我总是觉得好像我还需要进一步探讨这个话题。 我的基本理解是,一般而言,仅包含您可能在任何给定时间查询/排序的所有字段的单个索引可能不太有用,但是我已经看到了这种类型的东西。就像这样,有人想:“好吧,如果我们将所有这些东西都放在一个索引中,数据库就可以使用它来查找所需的东西”,而从未见过针对某些实际查询运行的执行计划。 想象一个这样的表: id int pk/uid name varchar(50) customerId int (foreign key) dateCreated datetime 我可能会看到包含name,customerId和dateCreated字段的单个索引。 但是我的理解是,这样的索引不会在查询中使用,例如: SELECT [id], [name], [customerId], [dateCreated] FROM Representatives WHERE customerId=1 ORDER BY dateCreated 对于这样的查询,在我看来,一个更好的主意是使用包括customerIdand dateCreated字段的索引,该customerId字段为“ first”。这将创建一个索引,该索引将以某种方式组织数据,以使该查询可以快速找到所需内容(按所需顺序)。 我看到的另一件事,也许与第一件事一样频繁,是每个字段上的单独索引。所以,每一个上name,customerId和dateCreated领域。 与第一个示例不同,在我看来,这种安排有时至少部分有用。查询的执行计划可能表明,至少它是使用上的索引customerId来选择记录,但没有使用带有dateCreated字段的索引来对记录进行排序。 我知道这是一个广泛的问题,因为对任何特定表集上的任何特定查询的特定答案通常是查看执行计划说的将要执行的操作,否则将表和查询的详细信息纳入其中帐户。另外,我知道这取决于查询的运行频率,而不是为其维护特定索引的开销。 但是我想我要问的是作为索引的一般“起点”,为特定的,经常被拉的查询以及WHERE或ORDER BY子句中的字段具有特定索引的想法是否有意义?
22 sql-server  index 

1
SQLite的局限性
从单一用户的,嵌入式的,面向原型的数据库引擎中获取sqlite数据库有多远?
22 sqlite 

7
需要将SQL Server迁移到MySQL
我在Windows服务器上的SQL Server 2008上有一个数据库,我想将所有数据移到Ubuntu服务器上的MySQL数据库中。我尝试将SQL Server导入和导出向导与MySQL ODBC驱动程序一起使用,并且它可以正确访问两个数据库,但是不存在包含用于类型转换的规范的xml文件,并且该规范对于我而言无法正确创建。有谁知道如何创建类型转换文件或在哪里可以找到更好的工具来传输此数据?

3
Mnesia:优势与差异
与主要的SQL数据库实现相比,Mnesia有何优势?它们之间有何不同? 我可以使用数据库保存大量数据而不会导致性能显着下降吗?

4
如何将表中的最大行数限制为仅1
我的SQL Server数据库中有一个配置表,该表只能有一行。为了帮助将来的开发人员理解这一点,我想防止添加多行数据。我选择为此使用触发器,如下所示... ALTER TRIGGER OnlyOneConfigRow ON [dbo].[Configuration] INSTEAD OF INSERT AS BEGIN DECLARE @HasZeroRows BIT; SELECT @HasZeroRows = CASE WHEN COUNT (Id) = 0 THEN 1 ELSE 0 END FROM [dbo].[Configuration]; IF EXISTS(SELECT [Id] FROM inserted) AND @HasZeroRows = 0 BEGIN RAISERROR ('You should not add more than one row …


1
启动时出现“ ORA-03113:通信通道上的文件结束”
在过去三天里,我一直在这里阅读有关Oracle支持以及其他任何地方的文章,而我已经放弃了这个问题。 Oracle数据库挂起。关闭数据库几个小时,然后退出。它不会重新启动。服务器已重新启动。Oracle重新启动。逐步进行:启动nomount起作用,更改数据库挂载工作,更改数据库打开返回ORA-03113。全部都在本地主机上-不在网络上。该计算机没有运行任何类型的防火墙。 任何想法如何摆脱这个ORA-03113错误?在过去的4.5个小时中,我一直在电话上与印度提供支持,但我还没有发现任何有用的人。
22 oracle  startup 

3
如何为国际数据库选择排序规则?
我正在设计一个数据库,该数据库将以不同的语言存储数据(使用UTF-8),所以我认为显示查询结果的最佳方法是在查询过程中根据用户的语言对其进行排序(因为不止一种正确的方法),如下所示: SELECT a < b COLLATE "de_DE" FROM test1; 假设这是处理国际数据的正确方法,这是数据库本身的最佳整理方法?PostgreSQL文档说: C和POSIX归类均指定“传统C”行为,其中仅将ASCII字母“ A”至“ Z”视为字母,并且严格按字符代码字节值进行排序。 我认为这是这种情况下的最佳选择,还是我错了? (奖金问题:在查询本身中选择排序规则是否太慢?)。

1
为什么CREATE INDEX…WITH ONLINE = ON会在几分钟内阻止对表的访问?
我有一个现有表: CREATE TABLE dbo.ProofDetails ( ProofDetailsID int NOT NULL CONSTRAINT PK_ProofDetails PRIMARY KEY CLUSTERED IDENTITY(1,1) , ProofID int NULL , IDShownToUser int NULL , UserViewedDetails bit NOT NULL CONSTRAINT DF_ProofDetails_UserViewedDetails DEFAULT ((0)) ); 该表有150,000,000行。系统以24x7x365运行,因此没有定期发生的维护时段。 我想向表添加索引,并且使用SQL Server企业版,我应该能够做到这一点而不会阻止对表的写访问。我使用的命令是: CREATE INDEX IX_ProofDetails_ProofID_Etc ON dbo.ProofDetails (ProofID, IDShownToUser) INCLUDE (UserViewedDetails) WITH (ONLINE=ON , ALLOW_ROW_LOCKS=ON , …

2
关于何时使用非DBO模式与新数据库的决策标准
我主要是一名应用程序开发人员,但发现自己必须为当前项目(顺便说一下... MS SQL Server 2008)做所有的前期数据库工作。作为第一个决定,我试图确定是使用单独的数据库还是在同一数据库中使用单独的架构划分状态。我已经阅读了一些有关SQL Server Schema的文章,这似乎是分离对象域的一种自然方法(我喜欢),但是我不确定这种模式是否存在隐性成本。 在这两种方法之间进行选择时,我应该考虑哪些更实际的事情?如果我避免dbo.mytable赞成,myschema.mytable会为我的体系结构带来其他挑战(或问题)吗? 附带说明。。。在某些时候,这将移交给真正的 DBA进行维护/支持,因此,我试图确保自己的生活不会更加艰难。

5
是否有DBMS允许外键引用视图(而不仅仅是基表)?
受到Django建模问题的启发:Django中具有多个多对多关系的数据库建模。数据库设计类似于: CREATE TABLE Book ( BookID INT NOT NULL , BookTitle VARCHAR(200) NOT NULL , PRIMARY KEY (BookID) ) ; CREATE TABLE Tag ( TagID INT NOT NULL , TagName VARCHAR(50) NOT NULL , PRIMARY KEY (TagID) ) ; CREATE TABLE BookTag ( BookID INT NOT NULL , TagID INT …

8
是否有理由使用极端缩写的表名?
我们正在使用供应商的应用程序中的数据库设置,很难读取数据库表名称,也没有关于存储位置的文档。我可以看到为什么要在专有应用程序中混淆其表结构,但是此应用程序(企业资源计划)的卖点之一是它的可定制性。 表名称就像aptrx(应付帐款交易)和apmaster_all(奇怪的是,这是供应商表)。这是一个非常复杂的数据库,所以我想知道该约定是否有任何逻辑,或者是否只是有意地对其进行了混淆。 据我所知,表名的长度不会明显影响性能,对吗?数据库非常复杂(数百个表),因此排序是有意义的,但是我无法想象为什么AccountsPayableTransactions不如aptrx更好。

4
授予运行SQL Server作业的权限
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 7年前。 我在MSSQL Server 2005上有一份工作,希望允许任何数据库用户运行。 我不担心安全性,因为作业实际工作的输入来自数据库表。仅运行作业,而不向该表添加记录将无济于事。 我只是找不到如何授予工作公开权限。 有什么办法吗?在这一点上,我唯一能想到的就是让这项工作持续运行(或按计划进行),但是由于它只需要很少做任何实际工作(也许每几个月一次),我确实希望这项工作能够尽快完成,这似乎不是最佳解决方案。

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.