数据库管理员

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

3
如何用LIMIT计算行数?
我想捕获X行,因此,我设置了LIMIT X;但是我又如何同时计算总行数呢? 目前,我使用两个单独的查询来执行以下操作: SELECT COUNT(*) FROM col WHERE CLAUSE SELECT * FROM col WHERE CLAUSE LIMIT X 有没有办法在一个查询中做到这一点? 编辑:输出应为col单元格和行数。实际上,在选择了col单元格之后,它应该遍历表格进行计数。 我知道不可能合并这两个查询,因为第一个返回1行,但是第二个返回X行。我很好奇mysql中是否有一个函数在存在时返回行数LIMIT。

2
将Postgresql数据库从一台服务器移动到另一台服务器
我已经在家里创建了一个数千兆字节的(空间)数据库,我想将整个数据库从我的工作计算机中的一台计算机上移走。 没什么,我将在工作计算机上创建一个新的postgresql / postgis数据库实例。db用户在两台计算机上的名称可能相同也可能不同。 可能吗?我应该注意些什么?我该如何缓解疼痛? 我正在使用带有postgis扩展名的postgresql v9.1.5。Ubuntu12.04(内核3.2.0-31)

2
产品属性列表设计模式
我正在更新我们网站的产品数据库。它内置于MySQL中,但这更多是一个通用的数据库设计模式问题。 我打算切换到Supertype / Subtype模式。我们当前/以前的数据库主要是一个表,其中包含有关一种产品类型的数据。我们正在考虑将我们的产品范围扩展到包括不同的产品。 这个新的草稿设计是这样的: Product product_[type] product_attribute_[name] ---------------- ---------------- ---------------------------- part_number (PK) part_number (FK) attributeId (PK) UPC specific_attr1 (FK) attribute_name price specific_attr2 (FK) ... ... 我对产品属性表有疑问。这里的想法是产品可以具有给定属性的列表,例如颜色:红色,绿色,蓝色或材料:塑料,木材,铬,铝等。 该列表将存储在表中,并且该属性项的主键(PK)将在特定产品表中用作外键(FK)。 (Martin Fowler的书《企业应用程序体系结构的模式》称为“ 外键映射 ”) 这允许网站界面提取给定属性类型的属性列表,并将其吐入下拉选择菜单或其他UI元素中。该列表可以视为属性值的“授权”列表。 对我而言,拉出特定产品时最终发生的连接数量过多。您必须将每个产品属性表都连接到产品,以便获得该属性的字段。通常,该字段的名称可能仅仅是字符串(varchar)。 这种设计模式最终会创建大量表,并且最终会为每个属性提供一个表。解决此问题的一种方法是为所有产品属性创建更多的“抓包”表。像这样: product_attribute ---------------- attributeId (PK) name field_name 这样,您的表可能如下所示: 1 red color 2 blue color 3 chrome …


4
什么更好/更快?MySQL或文件系统?
假设一个网站是一个人的目录。对于每个人,可能会有个人资料照片和传记。 我承认我的SQL查询可能会更好,但总的来说会更快并且使用更少的处理能力。 要检查文件是否存在,然后将其打开或 检查MySql以查看生物是否存在并显示它。 我很确定在上述情况下,文件系统会占用mysql数据库。 如果我使数据库成为只读的分隔txt文件怎么办? 在这种情况下,什么更快? 如果txt文件中有太多记录,是否有某个特定点,最好使用MySql?

3
数据库大小如何影响性能:理论与现实
有很多说法说数据库大小不会在很大程度上影响性能。只要表上的索引适合内存,数据库就应该保持性能。 但是现实是什么?如果数据库体系结构不是最好的,则索引将无法容纳在内存中,并且可能存在大量冗余数据,是否只需删除冗余数据即可获得显着收益?我估计可以删除数据库中60-80%的数据。 我相信,减小数据库大小并增加RAM以使索引可以容纳在内存中将显着提高性能,这将为重新构建系统提供几个月的喘息空间。 是否还有其他因素(例如IO,碎片,工作数据集等)会影响基于数据库大小的性能?

3
内联TVF的效果与观看次数
我有一个数据库,我在其中使用嵌入式TVF(表值函数)而不是视图。例如,我可能在TVF [fnCarBrands]内将两个称为[汽车模型]和[汽车制造商]的表连接在一起。 然后,其他TVF会调用这些TVF进行进一步的处理和报告。因此,我可以使用函数[fnCarBrands]并连接到表[购买年份]以形成函数[fnCarBrandHistory]。以此类推,用于多层TVF。 我可以使用视图获得相同的功能,因为我的内联TVF实际上只是表和其他TVF的连接。 用这种方式编写的嵌入式TVF的性能与视图相比如何?

1
是什么导致TRUNCATE TABLE花费很长时间?
我正在运行具有主/从复制(1个主,2个从)的MySQL5.5。 我有一个每周运行一次并截断特定表的过程。该表不是很大,只有几千条记录。 出于某种原因,该TRUNCATE TABLE命令的执行时间非常长(在主机和从机上)。执行大约需要40万毫秒!当它在从属服务器上运行时,它将导致它滞后于主服务器。在后TRUNCATE TABLE结束,一切恢复正常。 我知道一个从站在执行时没有收到任何读取,TRUNCATE TABLE因为它是一个专用的从站,并且从该从站读取的进程已关闭。同样,在该从站上,执行所花费的时间相同。 表格结构如下:http : //pastebin.com/qEQB4juR 关于如何加快TRUNCATE TABLE的任何想法?

3
什么会导致孤立的## MS_PolicyEventProcessingLogin ##?
今天早上,我注意到我的SQL日志中充满了以下消息: 在队列'msdb.dbo.syspolicy_event_queue'上运行的激活的过程'[dbo]。[sp_syspolicy_events_reader]'输出以下内容: '无法作为数据库主体执行,因为主体“ ## MS_PolicyEventProcessingLogin ##”不存在,这种类型的无法冒充校长,或者您没有权限。” 运行以下命令EXEC sp_change_users_login 'report'表明登录实际上是孤立的。 我能够按照此MSDN帖子中的建议运行以下命令来修复它。 EXEC sp_change_users_login 'Auto_Fix', '##MS_PolicyEventProcessingLogin##', NULL, 'fakepassword' 但是问题仍然存在:究竟是什么原因导致该校长最初成为孤儿?谷歌搜索和研究表明,其他人也有这个问题,但是我还没有找到原因的描述。错误开始出现的那一刻,我什么都没有注意到。 去年夏天,我们将整个服务器移至SAN存储模型,此举恢复了所有操作(包括msdb),但那是几个月前。只是最近才使该症状变得明显,因为它早在几周前才出现在日志中。

3
什么时候应该删除索引并重新创建?
我们正在构建一个最初将是1 TB的数据仓库,并且每月将增长20gig。 对于某些表,我们每天进行ETL流程,而另一些表则每周/每月进行。 当有数据导入到表中时,是否有必要删除并重新创建索引? 是否有必要删除和重新创建索引,或者它们会自动更新? 统计信息设置为自动更新。 非常感谢您的帮助和指导。 我得到了这个天才脚本: SELECT 'ALTER INDEX [' + ix.name + '] ON [' + s.name + '].[' + t.name + '] ' + CASE WHEN ps.avg_fragmentation_in_percent > 40 THEN 'REBUILD' ELSE 'REORGANIZE' END + CASE WHEN pc.partition_count > 1 THEN ' PARTITION = ' + …



2
在备份大型SQL Server数据库的同时执行数据更新操作
我有一个大型数据库(有上千万条记录),我将在该数据库上执行完整的数据库备份。 但是,数据库足够大,可以在备份之前和期间以及在备份发生期间和之后启动事务。 例如: T0 = Transaction A start T1 = Full database backup start T2 = Transaction B start (will not deadlock with A) T3 = Transaction A commit/rollback (does not matter, does it?) T4 = Full database backup end T5 = Transaction B commit/rollback (again, does not matter, does …

2
如何通过表字段的组合使用唯一键?
看看下面的sqlfiddle:http ://sqlfiddle.com/#!2/dacb5/1 CREATE TABLE contacts ( id int auto_increment primary key, name varchar(20), network_id int, network_contact_id int ); INSERT INTO contacts (name, network_id, network_contact_id) VALUES ('John', 4, 10), ('Alex', 4, 11), ('Bob', 4, 12), ('Jeff', 4, 45), ('Bill', 7, 11), ('Walter', 7, 45), ('Jessie', 7, 360) ; 我有一个基本的联系表。该network_id和network_contact_id字段包含链接到其他表的ID号码。 我希望能够运行INSERT IGNORE查询,此表,但我想用的组合network_id,并network_contact_id作为唯一键来匹配。 …

2
重建-聚集索引,表或两者?
我在任何地方都找不到确切的资源,因此希望一位专家可以在这里给我答案。 我有一个很大的表,我们必须在其中添加一列。聚集索引非常分散,我想做一个ALTER INDEX REBUILD清理它。 我通常ALTER TABLE REBUILD在更改列时也会执行一次,因为这会清除该操作中的所有指针或拆分。 因为我们在谈论聚集索引,本质上就是表,我是否需要同时做这两个事情? 我怀疑ALTER INDEX REBUILD集群中的不会更新遗嘱的所有内容ALTER TABLE,但是我也担心ALTER TABLE不会清理索引碎片。

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.