数据库管理员

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

7
为什么不使用表格代替物化视图?
我是Oracle数据库的新手。如果我正确理解,则物化视图是将结果集另存为数据库中的物理表的视图,并且会基于某些参数刷新该视图/表。如果将视图另存为物理表,为什么不首先将数据存储到表中?那么,使用物化视图而不是表的好处是什么?

6
如何有效地获取“最近对应的行”?
我有一个必须非常常见的查询模式,但是我不知道如何为它编写有效的查询。我想查找与“最近日期不晚于”另一个表的行相对应的表的行。 例如,我有一张桌子,inventory它代表我当天持有的库存。 date | good | quantity ------------------------------ 2013-08-09 | egg | 5 2013-08-09 | pear | 7 2013-08-02 | egg | 1 2013-08-02 | pear | 2 还有一张表,上面写着“价格”,该表保存了某天的商品价格 date | good | price -------------------------- 2013-08-07 | egg | 120 2013-08-06 | pear | 200 2013-08-01 | egg | 110 …

1
除万圣节保护外,SCHEMABINDING功能还有什么好处?
众所周知,SCHEMABINDING函数可以避免更新计划中不必要的假脱机: 如果您使用的是不触摸任何表(即不访问数据)的简单T-SQL UDF,请确保SCHEMABINDING在创建UDF时指定了该选项。这将使UDF成为模式绑定,并确保查询优化器不会为涉及这些UDF的查询计划生成任何不必要的假脱机操作符。 SCHEMABINDING即使不访问数据,该功能还有其他优点吗?

3
添加通配符时,SQL Server查询的速度显着下降(或顶部)
我有一个2千万只动物的动物园,可以在我的SQL Server 2005数据库中进行跟踪。其中约1%是黑色,其中约1%是天鹅。我想获取所有黑天鹅的详细信息,因此,不想淹没我所做的结果页面: select top 10 * from animal where colour like 'black' and species like 'swan' (是的,不建议您将这些字段设置为自由文本,但是它们都已编入索引)。事实证明,我们没有这种动物,因为查询会在大约300毫秒内返回空集。如果我使用'='而不是'like',它的速度大约是以前的两倍,但是我有一个预感,后者将为我节省一些输入时间。 事实证明,动物园的负责人认为他可能输入了一些“黑色”的天鹅,因此我相应地修改了查询: select top 10 * from animal where colour like 'black%' and species like 'swan' 事实证明,这些都不存在(事实上,除了“黑色”动物之外,没有“黑色%”动物),但是查询现在大约需要30秒才能返回空值。 看来这只是“ top”和“ like%”的组合造成麻烦,尽管 select count(*) from animal where colour like 'black%' and species like 'swan' 很快返回0,甚至 …

1
如何在MySQL中交换表?
假设我有一个表foo,其中包含不时计算的一些统计信息。其他查询大量使用它。 这就是为什么我要在其中计算更多最新统计信息foo_new并在计算准备就绪时交换它们。 我可以做 ALTER TABLE foo RENAME foo_tmp; ALTER TABLE foo_new RENAME foo; 但是,如果在foo没有表的情况下查询需要在这两行之间有表,该foo怎么办?我想我必须以某种方式锁定它...还是有另一种方法可以锁定它?

7
为什么ORDER BY不属于View?
我了解 您 无法拥有 ORDER BY视野。(至少在我正在使用的SQL Server 2012中) 我也理解排序视图的“正确”方法是通过在查询视图ORDER BY的SELECT语句周围放一个。 但是,对于实际的SQL和视图的用法而言,它相对较新,所以我想了解为什么这是设计使然。如果我正确地遵循了历史记录,这曾经是可能的,并且已从SQL Server 2008中明确删除,依此类推(请不要在确切的版本上引用我的意思)。 但是,我想出Microsoft为什么删除此功能的最佳理由是因为“视图是未排序的数据集合”。 我假设有一个很好的,合理的理由来说明为什么View应该不排序。为什么视图不能只是扁平化的数据收集?为什么特别未排序?似乎很难(至少对我/恕我直言)提出一种具有排序视图的情况。

3
为什么InnoDB将所有数据库存储在一个文件中?
MyISAM过去很方便地将每个表存储在相应的文件中。InnoDB在很多方面都取得了进步,但是我不知道为什么InnoDB将所有数据库存储在一个文件中(ibdata1默认情况下)。 我知道InnoDB将按表的各个索引文件映射文件中数据的位置,但是我不明白为什么它将所有数据混合在一个文件中。更重要的是,为什么要混合服务器上所有数据库的数据? MyISAM的一个有趣功能是可以将数据库文件夹复制/粘贴到另一台计算机上,然后使用该数据库(无转储)。

7
是否可以使用PostgreSQL快速创建/恢复数据库快照?
首先,我是一名开发人员,而不是DBA或sysadmin。请轻柔:) 我正在开发一个应用程序工作流,其中一个用户操作将触发数据库中的复杂更改-在某些表中创建数百条记录,在其他表中更新数百条记录,等等。总共约有12个表(约100个表) )被此操作所感动。由于复杂性,在执行其他测试之前,我很难手动还原所有更改。在开发的大部分时间里,我可以在工作流的末尾插入一个“ ROLLBACK”语句,但是当我接近提交更改时,我需要测试真实的东西。 我有要使用的生产数据库的本地副本。就我而言,测试之间的转储和还原比编写脚本撤消所有更改要快。它的速度更快,但仍然使我放慢了速度(在老化的笔记本电脑上,还原大约需要20分钟)。有什么方法可以保存数据库当前状态的快照,然后快速将其还原? 我保证是系统上唯一的用户,并且我具有root访问权限。tar和gzip压缩后,数据库转储约为100MB。PostgreSQL版本是8.3。 在此先感谢您提供任何有用的想法。


4
在2008 R2上优于SQL Server 2012的客观业务原因是什么?
我的公司正在决定是否要为新的数据库服务器购买SQL Server 2012 Denali或SQL Server 2008 R2。我正在寻找客观原因来选择一个。 我们的要求: 标准版(出于财务原因,并且不需要企业功能) OLTP工作负载(这意味着我们不需要新的窗口功能和列存储索引) 数据库大小10-100 GB 无需商业智能功能。只需要关系引擎 同步数据库镜像 目前,我知道以下原因: SQL Server 2012 Denali 最新版本 SQL Server 2008 R2 成熟的技术 我似乎找不到很多技术原因来偏爱一个。基本上,归结为选择能够成功运行的可靠技术,而不是可用的最新和最佳版本。 做出决定的客观原因是什么?

4
在SQL Server中创建可以保存存储过程结果的临时表的最简单方法是什么?
很多时候,在处理SQL Server时,我需要编写如下内容。 create table #table_name ( column1 int, column2 varchar(200) ... ) insert into #table_name execute some_stored_procedure; 但是,创建一个具有与存储过程相同的语法的表是一项繁琐的任务。例如,sp_helppublication的结果有48列!我想知道是否有任何简单的方法可以做到这一点。 谢谢。

6
为什么使用WHERE 1或WHERE 1 = 1?
通常,如果查询语句中不需要条件,则不使用WHERE子句。但是我看到WHERE 1在许多地方都使用了子句,即使没有其他条件也是如此。 为什么要这样做? 执行时间是否有特定的好处? 是否启用其他功能? 使用WHERE 1=1类似于吗?
50 mysql-5.1 

5
为什么我不使用SQL Server选项“针对临时工作负载进行优化”?
我一直在阅读有关Kimberly Tripp的一些有关SQL Server计划缓存的精彩文章,例如:http : //www.sqlskills.com/blogs/kimberly/plan-cache-and-optimizing-for-adhoc-workloads/ 为什么甚至有“针对临时工作负载进行优化”的选项?这不应该一直都在吗?无论开发人员是否在使用即席SQL,为什么不在每个支持它的实例(SQL 2008+)上都启用此选项,从而减少缓存膨胀?


1
如何在DATABASE vs SCHEMA上为用户管理默认特权?
我想将一个相当简单的内部数据库驱动的应用程序从SQLite3迁移到PostgreSQL 9.3,并在我进行操作时加强数据库中的权限。 该应用程序当前包含一个用于更新数据的命令。和一个查询它。当然,我还需要以其他方式维护数据库(创建新表,视图,触发器等)。 虽然此应用程序最初将是服务器上唯一托管的应用程序,但我更倾向于假设将来它可能与其他数据库一起托管在服务器上,而不是在必要时稍后进行争夺。未来。 我认为这些是相当普遍的一组要求,但是我很难找到一个简单的教程来解释如何使用这种用户/特权分离在PostgreSQL中设置新数据库。有关组,用户,角色,数据库,架构和域的参考详细介绍。但我发现它们令人困惑。 到目前为止,这是我尝试过的内容(来自psql“ postgres”): CREATE DATABASE hostdb; REVOKE ALL ON DATABASE hostdb FROM public; \connect hostdb CREATE SCHEMA hostdb; CREATE USER hostdb_admin WITH PASSWORD 'youwish'; CREATE USER hostdb_mgr WITH PASSWORD 'youwish2'; CREATE USER hostdb_usr WITH PASSWORD 'youwish3'; GRANT ALL PRIVILEGES ON DATABASE hostdb TO hostdb_admin; GRANT CONNECT …

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.