数据库管理员

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


2
优化25+百万行的查询
我正在使用MS SQL,并且必须在同一表上以不同条件运行多个查询。最初,我在原始表上运行了每个查询,尽管它们都共享一些过滤条件(即日期,状态)。这花费了很多时间(大约2分钟)。 数据行中有重复项,并且所有索引都是非聚集的。我只对4列的标准感兴趣,并且结果应仅输出所有查询的计数。 列需要:TABLE,FIELD,AFTER,DATE,并且对每一个的索引DATE和TABLE。 在仅创建了我需要的字段的临时表之后,它降到了1:40分钟,这仍然非常糟糕。 CREATE TABLE #TEMP ( TABLE VARCHAR(30) NULL, FIELD VARCHAR(30) NULL, AFTER VARCHAR(1000) NULL, DATE DATETIME, SORT_ID INT IDENTITY(1,1) ) CREATE CLUSTERED INDEX IX_ADT ON #TEMP(SORT_ID) INSERT INTO #TEMP (TABLE, FIELD, AFTER, DATE) SELECT TABLE, FIELD, AFTER, DATE FROM mytbl WITH (NOLOCK) WHERE TABLE = 'OTB' …


4
NVARCHAR列作为PRIMARY KEY或UNIQUE列
我正在开发SQL Server 2012数据库,并且对nvarchar列作为主键有疑问。 我有这张桌子: CREATE TABLE [dbo].[CODES] ( [ID_CODE] [bigint] IDENTITY(1,1) NOT NULL, [CODE_LEVEL] [tinyint] NOT NULL, [CODE] [nvarchar](20) NOT NULL, [FLAG] [tinyint] NOT NULL, [IS_TRANSMITTED] [bit] NOT NULL DEFAULT 0, CONSTRAINT [PK_CODES] PRIMARY KEY CLUSTERED ( [CODE_LEVEL] ASC, [CODE] ASC ) ) 但是现在我想使用[CODE]列作为主键并删除[ID_CODE]列。 如果我的NVARCHAR专栏为,是否有任何问题或惩罚PRIMARY KEY? [CODE]列值必须是唯一的,因此我认为可以UNIQUE为该列设置约束。 我必须用[CODE]作主键还是UNIQUE对[CODE]列设置约束会更好?

1
如何允许执行存储过程但不能执行写操作?
我想在我的SQL Server 2012实例上设置一个“读取”用户。我想让他有权执行任何存储过程,函数或直接SQL语句,该语句从所有表和视图中检索数据,但不进行更新或插入(即,读取任何内容而不写入任何内容)。 我是否可以在不按名称专门授予每个函数或存储过程权限的情况下进行设置,而是授予他对任何函数或存储过程的执行权限,而只是取消修改表的权限? 如果我改为运行SQL Server 2008,会发生什么变化吗? 澄清和补充: 如果存储过程更改了数据,则用户应收到错误消息(拒绝修改或完全拒绝访问存储过程)。 如果潜在的解决方案涉及拒绝权限,我是否可以不授予某些权限而不是拒绝? 是否可以在一条语句中将拒绝应用于数据库中的所有表,视图等(现在和将来存在)?

8
如何使MySQL客户端从mylogin.cnf读取密码?
我正在尝试使mysql客户端连接到mysql服务器,而不要求以交互方式提供密码。采取的步骤: 1)首先创建一个mylogin.cnf文件 $ mysql_config_editor set --user=<user> --password --host=<host> Enter password: 2)文件创建成功: $ ls -la .mylogin.cnf -rw-------. 1 urmt urmt 136 Dec 19 11:01 .mylogin.cnf $ mysql_config_editor print --all [client] user = <user> password = ***** host = <host> 3)使用mysql客户端连接 $ mysql <dbname> ERROR 1045 (28000): Access denied for user '<user>'@'<host>' …

1
PostgreSQL公用表表达式与临时表?
WITH的PostgreSQL文档显示以下示例: WITH regional_sales AS ( SELECT region, SUM(amount) AS total_sales FROM orders GROUP BY region ), top_regions AS ( SELECT region FROM regional_sales WHERE total_sales > (SELECT SUM(total_sales)/10 FROM regional_sales) ) SELECT region, product, SUM(quantity) AS product_units, SUM(amount) AS product_sales FROM orders WHERE region IN (SELECT region FROM top_regions) GROUP …
11 postgresql 

1
为什么CTE比内联子查询差很多
我试图更好地了解查询计划程序在postgresql中的工作方式。 我有这个查询: select id from users where id <> 2 and gender = (select gender from users where id = 2) order by latest_location::geometry <-> (select latest_location from users where id = 2) ASC limit 50 它在我的数据库上运行的时间不到10ms,在users表中有大约500k条目。 然后,我认为为避免重复的子选择,我可以将查询重写为CTE,如下所示: with me as ( select * from users where id = 2 …

5
有效传输大量(8400万行)数据
我大约有8400万行。所有这些都需要转移到同一服务器上的单独数据库中,然后我删除以从源数据库中删除大约6000万行。 8400万行都在同一表中。仅该表就占整个数据库的90%。 因此...来源:8400万行-> 2400万行目标:0行-> 8400万行 源运行完全恢复模式,目标将运行简单。 我想知道最有效的方法是什么? 计划A: 1)插入目标SELECT * FROM源 2)截断源 3)插入源SELECT * FROM目标WHERE keep_condition = 1 方案B: 1)将源数据库的备份还原为目标数据库 2)删除除目标数据库所需表之外的所有表 3)截断源 4)插入源SELECT * FROM目标WHERE keep_condition = 1 计划C: 1)插入目标SELECT * FROM源 2)删除源WHERE keep_condition = 0 或者是其他东西? 谢谢
11 sql-server 

1
将可为空的列添加到表的时间超过10分钟
我在表上添加新列时遇到问题。 我尝试运行几次,但是运行了十多分钟后,由于锁定时间,我决定取消查询。 ALTER TABLE mytable ADD mycolumn VARCHAR(50); 有用的信息: PostgreSQL版本:9.1 行数:〜250K 列数:38 可为空的列数:32 约束数量:5(1 PK,3 FK,1 UNIQUE) 索引数:1 操作系统类型:Debian Squeeze 64 我发现了有关PostgreSQL管理可空列的方式的有趣信息(通过HeapTupleHeader)。 我的第一个猜测是,因为此表已经具有8位的32个可空列MAXALIGN,所以HeapTupleHeader的长度为4个字节(未经验证,我不知道该怎么做)。 因此,添加新的可为空的列可能需要在每行上更新HeapTupleHeader以添加新的8位MAXALIGN,这可能会导致性能问题。 因此,我尝试更改可为空的列之一(实际上并不是真正可为空的),以便将可为空的列的数量减少到31,以检查我的猜测是否正确。 ALTER TABLE mytable ALTER myothercolumn SET NOT NULL; 不幸的是,这种更改也需要很长时间,超过5分钟,因此我也中止了它。 您是否知道会导致这种性能损失的原因?

2
MS SQL Server累积更新-最佳做法
我试图了解SQL Server累积更新推荐的最佳做法。 目前,我们秉承“除非CU解决的问题是我们遇到的问题,否则请不要做”的想法。这可以通过“如果还没有解决,就不要解决”的方法来实现,但是我想知道这是否真的是一个好主意,因为许多CU都具有性能增强功能。我们正在考虑将CU添加到CU发布后一两个月的定期维护周期中所应用的补丁中。 别人做什么,为什么? 作为影响以下答案的问题的更新,Microsoft的SQL Server团队于2016年3月24日宣布,他们正在更新其服务模型。Microsoft建议所有用户安装2016年1月之后发布的所有CU: 从CU的1月发行版开始,这些警告消息已更新,我们现在建议对CU进行持续,主动的安装。您应该计划以与计划安装SP(Service Pack)发布时相同的置信度来安装CU。这是因为CU已通过SP级别的认证和测试。此外,Microsoft CSS数据表明,以前通常在已发布的CU中解决了很大比例的客户问题,但并未主动应用。更重要的是,CU包含除修补程序之外的附加值。这些还可能包含可支持性,日志记录和可靠性更新,以增强整体体验。 除了消息和指导更新之外,我们还对CU采集模型进行了更新。 购置变更: 当然,传统上,CU通常在“ Hotfix”服务器上可用(伴随着与“ QFE”或“ Hotfix”相关联的“警告语言”)。这里的矛盾之处在于,CU不再是真正简单的快速修补程序。所包含的更新已在当今的单个以及整个系统集成级别进行了良好的测试。 因此,我们现在在microsoft.com/downloads上按照主流支持的基准(今天是2012 SP2 / SP3和2014 RTM / SP1)放置最新的CU,就像今天对Service Pack所做的那样 此外,我们很快将所有CU释放并维护到Windows Update目录中,以方便获取和分发 仅临时CU“按需”修复程序将放置在向前移动的修复程序服务器上 为了减少摩擦,从microsoft.com/downloads下载CU不需要提供/接收电子邮件和URL 我们也正在评估提供最新的CU作为Microsoft Update上的可选更新,就像今天的Service Packs一样。
11 sql-server 

1
IDENTITY_INSERT如何影响并发性?
我正在尝试使用第三方第三方SAP附加组件来帮助客户,该附加组件存在发布故障并且已不再支持。 在某些情况下,它将存档和不完整的帖子从发布队列表存档到发布存档表。我需要将这些存档结果移回队列。 队列ID是一个标识列,我希望保持不变。 问题是,如果我关闭了identity_insert on / insert / identity_insert,那么与创建队列条目并期望identity列自动生成的进程的并发性有什么期望? 任何最好的方式来演示这种行为的指针也将不胜感激。

3
错误-函数'innodb'已经存在
我正在寻找开始将一些MyISAM表转换为INNODB。在4核/ 8线程cpu上运行带有MySQL 5.6(apt-get从5.5升级),32G ram的Ubuntu 14.04 Server。最初遇到麻烦... could not open single-table tablespace file .\mysql\innodb_index_stats.ibd after restart of MySQL 和 Error: Table "mysql"."innodb_table_stats" not found. 我遵循了Rolando的建议,数据库不再崩溃或创建巨大的error.log。 (以上问题已不存在,仅描述了主要事件) 现在,在将任何内容转换为INNODB之前,我担心以下错误。从我阅读的内容中可以忽略联合,下面的第二行(也是本文的主题)与我有关 2014-05-19 01:50:57 30950 [Note] Plugin 'FEDERATED' is disabled. 2014-05-19 01:50:57 30950 [ERROR] Function 'innodb' already exists 2014-05-19 01:50:57 30950 [Warning] Couldn't load plugin named …
11 mysql  innodb 


1
使用触发器进行同步
我的要求与之前的讨论类似: 编写一个简单的银行架构:如何使我的余额与他们的交易记录保持同步? 结合交易触发 我有两个表,[Account].[Balance]和[Transaction].[Amount]: CREATE TABLE Account ( AccountID INT , Balance MONEY ); CREATE TABLE Transaction ( TransactionID INT , AccountID INT , Amount MONEY ); 当对该[Transaction]表进行插入,更新或删除时,[Account].[Balance]应基于进行更新[Amount]。 目前,我有一个触发器可以完成此任务: ALTER TRIGGER [dbo].[TransactionChanged] ON [dbo].[Transaction] AFTER INSERT, UPDATE, DELETE AS BEGIN IF EXISTS (select 1 from [Deleted]) OR EXISTS (select 1 …

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.