数据库管理员

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

3
事实表外键为空?
我是数据集市设计的新手,需要清除一些概念。 我已经阅读了一些有关维建模的知识,在该模型中,事实表存储了对维表的外键引用。 现在假设我有一个电话号码维度表和一个phone_extension维度表。(这些表具有不同的详细信息,因此我无法将它们组合在一起) 据我了解,这两个维度表都将具有整数主键以获得更好的性能,事实表将具有其自己的整数主键,并且还存储对这些维度表的外键引用。 但是,假设我有一种情况,并非所有电话号码都有与之相关的phone_extension。(某些电话号码不需要加分机号) 对于具有扩展名的电话号码,事实表将同时具有两个维表的外键引用,但是如何捕获只有电话号码却没有扩展名的情况(反之亦然,即没有电话号码的扩展名) ? 我是否应该使用事实表中电话号码为FK且具有值且phone_extension外键为null的方式捕获此类信息?还是这些无关的对象没有记录在事实表中? 我还需要生成此数据集市的报告。那么,我是从查询事实表并检索维键值开始还是直接从维表中报告? 感谢您阅读本文的时间!! 感谢任何帮助!

5
SQL Select花费太多时间执行
这是从临时表中进行的简单选择,左键将现有表保留在其主键上,其中两个子选择使用前1个引用联接表。 在代码中: SELECT TempTable.Col1, TempTable.Col2, TempTable.Col3, JoinedTable.Col1, JoinedTable.Col2, ( SELECT TOP 1 ThirdTable.Col1 -- Which is ThirdTable's Primary Key FROM ThirdTable WHERE ThirdTable.SomeColumn = JoinedTable.SomeColumn ) as ThirdTableColumn1, ( SELECT TOP 1 ThirdTable.Col1 -- Which is also ThirdTable's Primary Key FROM ThirdTable WHERE ThirdTable.SomeOtherColumn = JoinedTable.SomeColumn ) as ThirdTableColumn2, FROM …

1
在动态SQL中打印参数
我已经将动态SQL用于许多任务,并不断遇到相同的问题:打印在动态T-SQL语句中使用的变量的值。 例如: Declare @SQL nvarchar(max), @Params nvarchar(max), @DebugMode bit, @Foobar int select @DebugMode=1,@Foobar=364556423 set @SQL='Select @Foobar' set @Params=N'@Foobar int' if @DebugMode=1 print @SQL exec sp_executeSQL @SQL,@Params ,@Foobar=@Foobar 上面代码的打印结果只是“选择@Foobar”。有什么方法可以动态打印正在执行的sql的值和变量名?还是在执行打印时,将参数替换为其实际值,以便SQL可重新运行? 我玩过创建一个或两个函数来完成相似的工作,但是却涉及数据类型转换,模式匹配截断问题和非动态解决方案。我很好奇其他开发人员如何在不手动打印每个变量的情况下解决此问题。

2
SQL Server开发人员迁移到Oracle的资源
对于希望学习Oracle基础知识的SQL Server开发人员,您可以推荐哪些资源? 我正在寻找描述这些系统之间差异的全面白皮书或博客,并回答诸如“ 如何创建身份”列之类的问题。或什么数据类型等效于float?。

1
如何为两个或多个表的JOIN结果建立索引,以提高SQL Server的性能?
我是索引编制的新手,并介绍了索引编制的基础知识。我可以在相应表的索引部分内找到主键约束的默认聚集索引,但是创建外键约束后,我找不到任何索引。 现在我有一个要求,应该在其中实施索引以提高性能。我已经读过关于索引外键以提高JOIN结果的性能的信息。 我是否需要将外键列添加到其他非聚集索引中,或者外键具有默认索引? 如果我的SQL表结构如下并且我使用t1_col3的WHERE子句进行了JOIN查询,如何有效地实现索引 table1 table2 ------ ------ t1_col1(pk) t2_col1(pk) t1_col2 t2_col2 t1_col3 t2_col3 t1_col4 t2_col4 t2_col1(FK)

2
如何阻止MySQL从站将更改复制到“ mysql”数据库?
我将我的从属设备设置为不复制“ mysql”数据库,如本说明中所述 SHOW SLAVE STATUS\G; Slave_IO_State: Waiting for master to send event Master_Host: 127.0.0.1 Master_User: replication Master_Port: 3306 Connect_Retry: 60 Master_Log_File: master-bin.000001 Read_Master_Log_Pos: 1660 Relay_Log_File: mysql-relay-bin.000004 Relay_Log_Pos: 478 Relay_Master_Log_File: master-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: **Replicate_Ignore_DB: mysql** Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 1660 Relay_Log_Space: 633 …

2
COMMIT是否可以在PostgreSQL 9.5的匿名plgpsql函数中工作?
我正在将大量大文件导入到许多表中,这些表将使用匿名plpgsql代码块内的循环进行分区$do$。 $do$ BEGIN FOR yyyy in 2012..2016 THEN EXECUTE $$COPY table$$||yyyy||$$ FROM 'E:\data\file$$||yyyy||$$.csv DELIMITER ',' CSV;$$; END LOOP; END; $do$ LANGUAGE plpgsql 整个过程大约需要15个小时,我希望如果某个时刻出现导入错误,所有导入都不会回滚。 IIRC COMMIT在存储的函数中不起作用,因为整个函数被视为单个事务。 从文档中$do$ 将代码块视为没有参数的函数的主体,并返回void。它被解析并执行一次。 我假设这意味着整个$do$事务是一个事务,因此在该块内的提交将不起作用。我对么?


1
哈希联接vs哈希半联接
PostgreSQL 9.2 我想明白之间的差别Hash Semi Join,只是Hash Join。 这是两个查询: 一世 EXPLAIN ANALYZE SELECT * FROM orders WHERE customerid IN (SELECT customerid FROM customers WHERE state='MD'); Hash Semi Join (cost=740.34..994.61 rows=249 width=30) (actual time=2.684..4.520 rows=120 loops=1) Hash Cond: (orders.customerid = customers.customerid) -> Seq Scan on orders (cost=0.00..220.00 rows=12000 width=30) (actual time=0.004..0.743 rows=12000 loops=1) …


1
sp_prepexec(sp_execute)与sp_executeSQL
问题的实质:实际的存储过程是实现临时表缓存的唯一机制,还是sp_executeSQL/ 等系统存储过程sp_execute也利用了它们? 我不是DBA,所以请少说话。我们的应用程序发送了准备好的语句,这些语句从探查器中运行,我看到它运行所有SQL,sp_prepexec这是同时运行sp_prepare和的系统过程sp_execute。我要尝试做的是弄清楚我是否从临时表缓存中受益。 我一直在使用带有object_id()的本指南来检查行为 https://sqlkiwi.blogspot.com/2012/08/temporary-tables-in-stored-procedures.html 然后,此博客文章上的第3点表明EXEC无法使用临时表缓存,但忽略了sp_executeSQL是否可以:http : //blogs.msdn.com/b/turgays/archive/2013/09/18/exec-vs- sp-executesql.aspx 在通过客户端发送的查询中,我创建了一个简单的临时表。 DECLARE @foo int; -- set by JDBC, unused but required to force a prepared statement SELECT 1 AS id INTO #tmp SELECT OBJECT_ID('tempdb..#tmp'); 在探查器中,我可以看到: declare @p1 int set @p1=NULL exec sp_prepexec @p1 output,N'@P1 int',N'declare @foo INT = @P1 SELECT 1 …

1
太多的空闲连接会影响PostgreSQL 9.2的性能吗?
我的数据库服务器上的某些查询似乎需要很长时间才能响应,而且我认为CPU使用率很高。运行时ps aux,我看到约250个“空闲”连接(我认为数量太多)。我还没有开始做完整的诊断,但是我想知道这是否是一个开始寻找的好地方。 我还在事务级池中使用PgBouncer。我怀疑可以idle通过调整池大小来轻松减少连接数。但是,除非有充分的理由,否则我不想开始进行太多更改。 idlePostgreSQL 9.2中的许多连接会影响性能吗? 非常感谢!


2
Oracle如何针对一个表处理多个并发INSERT
我试图更深入地了解Oracle 11g。我的问题很简单:Oracle如何处理试图同时将记录插入单个表的两个会话。 例如,INSERT A在表1的1:00 PM运行。它需要5分钟才能完成。INSERT B在表1上于1:02 PM执行。需要1分钟才能完成。 会发生什么?Oracle将在INSERT A完成之后将INSERT B排队等待执行吗?INSERT B是否将与INSERT A同时运行? 谢谢!
8 oracle  insert 

1
使用的数据库镜像协议TCP端口。一种默认,一种动态?
在SQL Server Always On可用性组™的主/辅助副本上执行以下查询时 SELECT DISTINCT local_tcp_port,protocol_type,num_reads,num_writes FROM sys.dm_exec_connections WHERE local_net_address is not null; 显示两个用于数据库镜像协议的本地tcp端口,5022&63420 Server Name local_tcp_port protocol_type num_reads num_writes ServerName 5022 Database Mirroring 102942598 5 ServerName 63420 Database Mirroring 5 89655349 该5022端口是预期的,因为它是配置为镜像端点的端口。 另一个似乎是一个动态端口,为什么使用这个端口? 它可能与以下事实有关:一个显示大量的读取(5022),而另一个显示大量的写入(63420)。 内部版本:13.0.5264.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.