数据库管理员

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

1
使用USING子句命名函数参数和JOIN结果之间的冲突
鉴于当前Postgres 9.4中的设置(来自此相关问题): CREATE TABLE foo (ts, foo) AS VALUES (1, 'A') -- int, text , (7, 'B'); CREATE TABLE bar (ts, bar) AS VALUES (3, 'C') , (5, 'D') , (9, 'E'); 上一个问题还有一个SQL Fiddle。 我写了SELECT一个FULL JOIN以实现所引用问题的目的。简化: SELECT ts, f.foo, b.bar FROM foo f FULL JOIN bar b USING (ts); 根据规范,解决列的正确方法ts是不使用表限定。任一的输入值(f.ts或b.ts)可以是NULL。该USING子句会产生一些奇怪的情况:引入输入中实际上不存在的“输入”列。到目前为止,一切都很优雅。 …


3
“使用”后MySQL数据库冻结
我最近犯了一个非常愚蠢的错误,损坏了我的Ubuntu安装。为了解决这个问题,我启动了一个实时CD并复制了数据库文件。但是,现在我已将文件夹从旧安装复制到新安装,每当我键入“ use database_name”时,它都将冻结在此位置: mysql> use my_database_name; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A 然后冻结而不给终端。
17 mysql  backup 

4
如何处理可变列的表设计
我有一个表设计方案,作为非DBA类型,我想就哪种方案更具可扩展性提出意见。 假设您被要求在都市圈的房屋上记录信息,从一个小社区(200座房屋)开始,但最终增长到5000000多个房屋。 您需要存储以下基本信息:ID#(可以用作唯一索引的唯一批号),Addr,City,State,Zip。很好,简单的表可以处理它。 但是每年,都将要求您记录有关所有房屋的额外信息-信息将每年更改。因此,例如,在第一年,要求您记录所有者的姓氏和平方英尺。第二年,要求您保留姓氏,但丢弃平方英尺,而是开始收集所有者的名字。 最后-每年,额外列的数量都会改变。可能从2个额外的列开始,然后在明年移至6,然后回落至2。 因此,一种表方法是尝试将自定义信息添加为房屋表中的列,因此只有一个表。 但是我有一种情况,有人为此安排了桌子: “房屋表”列:ID,地址,城市,州,邮政编码-每个房屋只有一行 ID Addr City State Zip ------------------------------------------- 1 10 Maple Street Boston MA 11203 2 144 South Street Chelmsford MA 11304 3 1 Main Avenue Lowell MA 11280 “自定义信息表”列:ID,名称,值-表如下所示: ID Name Value 1 Last Name Smith 2 Last Name Harrison 3 Last Name …

3
将SQL Server中的兼容模式从100更改为110的含义
我有一个Mydatabase在SQL Server 2008 R2中创建的数据库。我已升级到SQL Server 2012。 我正在尝试执行以下查询以计算百分位数 select Distinct [KEY],PERCENTILE_CONT(0.25) within group(order by EachPrice) OVER(Partition By [KEY]) As Q1,PERCENTILE_CONT(0.50) within group(order by EachPrice) OVER(Partition By [KEY]) As Q2, PERCENTILE_CONT(0.75) within group(order by EachPrice) OVER(Partition By [KEY]) As Q3, PERCENTILE_CONT(1) within group(order by EachPrice) OVER(Partition By [KEY]) As Q4 from Mydatabase …

3
使用HAProxy和PGBouncer的PostgreSQL高可用性/可伸缩性
我有一个Web应用程序的多个PostgreSQL服务器。通常,一个主机和多个从机处于热备用模式(异步流复制)。 我使用PGBouncer进行连接池:在连接到本地主机上的数据库的每台PG服务器(端口6432)上安装了一个实例。我使用事务池模式。 为了在从属服务器上平衡只读连接的负载,我将HAProxy(v1.5)与conf差不多使用: listen pgsql_pool 0.0.0.0:10001 mode tcp option pgsql-check user ha balance roundrobin server master 10.0.0.1:6432 check backup server slave1 10.0.0.2:6432 check server slave2 10.0.0.3:6432 check server slave3 10.0.0.4:6432 check 因此,我的Web应用程序连接到haproxy(端口10001),该端口在每个PG从站上配置的多个pgbouncer上进行负载平衡连接。 这是我当前架构的表示图: 这样可以很好地工作,但是我意识到有些实现方式大不相同:Web应用程序连接到单个PGBouncer实例,该实例连接到HAproxy,后者在多个PG服务器上实现负载平衡: 最好的方法是什么?第一个(我当前的一个)还是第二个?一种解决方案比另一种解决方案有什么优势? 谢谢

2
tinyint(N)是什么意思?
据我所知,当我们使用带有数字数据类型的参数长度时,它指定了显示宽度。 我尝试了以下方法: mysql> create table boolean_test (var1 boolean, var2 tinyint); Query OK, 0 rows affected (0.10 sec) mysql> show create table boolean_test; +--------------+------------------------- | Table | Create Table +--------------+------------------------- | boolean_test | CREATE TABLE `boolean_test` ( `var1` tinyint(1) DEFAULT NULL, `var2` tinyint(4) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 | +--------------+--------------------------- …

2
SQL Server:我们应该使用TCP还是命名管道还是使用默认管道?
从同一LAN中另一台服务器上的.NET 4客户端应用程序连接到SQL Server 2008 R2时,可以设置三种不同的网络协议: TCP协议 命名管道 不要在连接字符串中设置任何内容并使用默认值 什么是最佳做法?选择什么? 附加信息:服务器和客户端上都启用了TCP和命名管道。该应用程序正在使用数据库镜像。客户端和服务器通过快速LAN进行通信。 我们正在对此进行调查,因为我们有罕见且虚假的连接和超时问题。(但是无论如何,我都想知道最佳实践)。 在MSDN上有关于此主题的文章,但它非常笼统且含糊。它不建议或推荐任何有用的东西。


6
尝试查看数据库层次结构时出现“超出了锁定请求超时期限”错误
我的数据库有问题。 我可以运行基本查询,尽管比正常情况要慢得多。 当我尝试在SSMS Object Explorer中查看表,视图或过程的层次结构树时,得到lock request time out period exceeded。 我在此数据库中的对象上运行的SSRS报告不再完成。 与该数据库上存储的过程关联的作业也不会运行。 我尝试使用 sp_who2查找并杀死数据库上的所有连接,但是这并没有解决问题。 这里发生了什么?我该如何解决?

1
查找上次更新表的时间
查询: SELECT name AS TableName, create_date AS CreatedDate, modify_date as ModifyDate FROM sys.tables order by ModifyDate; ...会告诉我上次创建和修改表的时间(从DDL角度来看)。但是我想知道上一次实际数据是从表中插入还是从表中删除。是否可以在SQL Server中获得此权限?

3
启用触发器后,记录删除速度缓慢
以为通过以下链接可以解决此问题-解决方法可以正常工作-但补丁程序没有解决。与Microsoft支持人员一起解决。 http://support.microsoft.com/kb/2606883 好的,所以我有一个问题想扔给StackOverflow看看是否有人有想法。 请注意这是与SQL Server 2008 R2 问题:启用触发器后,从具有15000条记录的表中删除3000条记录需要3-4分钟,而禁用触发器则仅需要3-5秒。 表格设定 我们将两个表称为Main和Secondary。辅助数据库包含我要删除的项目的记录,因此在执行删除时,我会加入到辅助数据库表。进程在delete语句之前运行,以用要删除的记录填充辅助表。 删除声明: DELETE FROM MAIN WHERE ID IN ( SELECT Secondary.ValueInt1 FROM Secondary WHERE SECONDARY.GUID = '9FFD2C8DD3864EA7B78DA22B2ED572D7' ); 该表有很多列和大约14个不同的NC索引。在确定引发问题的原因之前,我尝试了多种尝试。 打开页面锁定(默认情况下我们已关闭) 手动收集统计数据 禁用自动收集统计信息 验证索引的健康状况和碎片 从表中删除聚簇索引 检查执行计划(没有显示为丢失的索引,对于实际删除,成本为70%,对于记录的合并/合并,成本约为28% 扳机 该表具有3个触发器(每个触发器分别用于插入,更新和删除操作)。我修改了删除触发器的代码以使其返回,然后选择一个以查看触发了多少次。在整个操作过程中,它仅触发一次(如预期)。 ALTER TRIGGER [dbo].[TR_MAIN_RD] ON [dbo].[MAIN] AFTER DELETE AS SELECT 1 RETURN 回顾 启用触发器-语句需要3-4分钟才能完成 关闭触发器-语句需要3-5秒才能完成 …

7
如何显示表的列名?
情况很简单:您有一个MySQL数据库,其中只有一个SQL查询接口,并且想知道带有查询的数据库结构。您可以使用show tables;command 列出表,但是如何查看各个列的名称呢? (SELECT语句显示Empty set是否没有数据,因此无法使用。)
17 mysql 


3
什么效率更高,使用where子句或使用具有百万个以上行表的联接?
我们运行的网站在一个表中有250MM行,而在大多数查询中,与之连接的另一个表中的行都不到15MM。 样本结构: MasterTable (Id, UserId, Created, Updated...) -- 15MM Rows DetailsTable (Id, MasterId, SomeColumn...) -- 250MM Rows UserTable (Id, Role, Created, UserName...) -- 12K Rows 我们通常必须对所有这些表进行一些查询。一种是获取免费用户(约1万个免费用户)的统计信息。 Select Count(1) from DetailsTable dt join MasterTable mt on mt.Id = dt.MasterId join UserTable ut on ut.Id = mt.UserId where ut.Role is null and …

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.