数据库管理员

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


3
为什么必须从对偶表中进行选择?
这适用于最可能出现在StackOverflow / dba.stackexchange上的主要关系数据库管理系统,它们是SQL Server,MySQL,PostgreSQL和SQLite(WebSQL)。 select 'abc' abc, 1 def; 它在Oracle上不起作用。为什么我们需要从Oracle的DUAL中进行选择?SQL的ISO / ANSI标准是否需要SELECT语句的FROM子句? 编辑: 根据Per Bacon Bit的回答,SQL标准似乎确实需要这样做。 因此,在现实中,因为DUAL名字是这样的用词不当,如果我要创建一个表,并将其命名为Atom或ONE,如create table one (atom int);.. select 'abc' abc, 1 def FROM one;-有没有比较的性能损失SELECT .. FROM DUAL?
15 oracle  select 

2
索引是否必须覆盖所有选定的列才能用于ORDER BY?
在SO上,最近有人问为什么不使用ORDER BY? 这种情况涉及MySQL中的一个简单的InnoDB表,该表包含三列和1万行。其中一列(整数)被索引了,OP试图检索按该列排序的整个表: SELECT * FROM person ORDER BY age 他附加了EXPLAIN输出,该输出显示此查询是使用filesort(而不是索引)解决的,并询问为什么会这样。 尽管有提示 FORCE INDEX FOR ORDER BY (age) 导致使用索引的提示,但有人回答(带有支持的注释/来自他人的评论)说,仅当从索引中读取所有选定的列时,索引才用于排序(即通常由Using index该Extra列中的指示)的EXPLAIN输出)。稍后给出了一个解释,即遍历索引然后从表中获取列会导致随机I / O,MySQL认为它比a更昂贵filesort。 这似乎是在关于ORDER BY优化的手册一章中碰到的,它不仅传达出强烈的印象,即ORDER BY从索引满足比执行其他排序更可取(实际上,它filesort是quicksort和mergesort的组合,因此 必须具有下限;虽然应该按顺序遍历索引并查找表,所以这很有意义),但它也忽略了此所谓的“优化”,同时还指出:Ω(nlog n)O(n) 以下查询使用索引来解析ORDER BY零件: SELECT * FROM t1 ORDER BY key_part1,key_part2,... ; 就我的阅读而言,在这种情况下就是这种情况(但没有明确提示就没有使用索引)。 我的问题是: 确实有必要为所有选定的列建立索引以便MySQL选择使用索引吗? 如果是这样,在哪里记录(如果有的话)? 如果没有,这里发生了什么?
15 mysql  index  innodb  order-by 

3
按范围返回每个日期的列
假设我有表A:BookingsPerPerson Person_Id ArrivalDate DepartureDate 123456 2012-01-01 2012-01-04 213415 2012-01-02 2012-01-07 我需要用以下视图实现: Person_Id ArrivalDate DepartureDate Jan-01 Jan-02 Jan-03 Jan-04 Jan-05 Jan-06 Jan-07 123456 2012-01-01 2012-01-04 1 1 1 1 213415 2012-01-02 2012-01-07 1 1 1 1 1 1 该系统用于举办活动,因此每次酒店预订可能需要1到15天之间的任何时间,但最多不过。任何想法将不胜感激。


1
PostgreSQL上金融应用程序的身份验证方法的选择
首先介绍一些背景。 LedgerSMB项目是在PostgreSQL上运行的开源财务会计软件项目。我们在用户定义的函数中实现了大量的业务逻辑,这些逻辑充当程序对象方法与数据库行为之间的主要映射工具。当前,我们将数据库用户用作身份验证用户,部分是通过选择(这允许集中的安全逻辑,以便可以编写其他工具并重复使用授予用户的权限),另一部分是根据需要(在从SQL-Ledger分叉之后)在该代码库上加装安全性的选择不多)。 这使我们可以访问PostgreSQL可以访问的合理数量的单点登录选项,从LDAP到Kerberos5。我们甚至可以在涉及密码的情况下使用PAM。它还允许我们在与其他应用程序集成或允许其他客户端界面时重用权限。对于财务会计应用程序来说,这似乎是一个净赢。 涉及明显的成本。对于Web应用程序,我们非常受支持的http auth类型限制。例如DIGEST完全被淘汰。BASIC可以正常工作,并且我们可以很容易地实现KRB5(我计划对此提供支持,并在1.4版本开箱即用)。虽然很可能会在必要时对它们进行垫片化(例如,BASIC +带有用户名和特定根ca的cn的cn的客户端SSL证书),但不能直接在此上正确地管理非常强大的身份验证措施。 同时,我们受到了很多批评,大多数是来自开发人群,还有一些是来自dba的批评,他们告诉我应用程序应该是安全屏障,而不是数据库。我仍然认为,较小的安全范围通常更好,重用业务逻辑和安全逻辑在一起,并且重用业务逻辑而不在同一级别重用安全逻辑使我感到非常危险。该程序。 我在这里错过任何重大的权衡吗?是否有我没有考虑的陷阱?


2
设计用户认证(角色和权利)模块
我正在尝试为MS SQL Server数据库建模用户身份验证模块,该模块将成为Delphi UI应用程序的后端。基本上,我想拥有一个用户帐户,其中该用户仅属于一个组。一个组可以具有“ n”个权限。 我还想将密码历史记录添加到数据库中,因为将要求用户根据应用程序设置(例如,每90天)更改其密码。 我也想在用户每次登录和注销时都记录一个事件。我将来可能会将其扩展到其他事件。 在下面,您会发现我的第一个裂缝。请让我知道任何改进的建议,因为这是我第一次这样做。 您是否发现需要其他属性以实现基于角色的安全性以及密码规则/有效期限的约束?

7
如何使用加密字段搜索MySQL数据库
假设我需要加密某些表的字段上的MySQL数据库。另外,我需要搜索一些我加密过的字段。 无论如何,如何搜索这些字段? 不能一步一步地解密每个记录:假设我有成千上万的记录。解密每个记录并检查每个记录是否与搜索匹配将花费太多时间和空间。 更新2012-09-07 向数据库架构添加更多详细信息将是可以的,因为我将要实现一个新应用程序。此外,我需要扩展当前在生产环境中运行的应用程序。但是即使对于那些应用程序,也可以添加更多详细信息。 更新2012-09-08 加密是这个问题的核心。 正如一些答案所建议的那样,访问限制已经适用-但不符合加密数据的正式要求。 此正式要求不是 支付卡行业数据安全标准 [PCI]。
15 mysql 

2
快速查看为SQL Server分配了多少RAM?
使用SQL Server 2005,您可以查看任务管理器,至少可以粗略地了解为SQL Server分配了多少内存。 使用SQL Server 2008,即使SQLServer:Memory Manager /总服务器内存(KB)性能计数器的状态为16,732,760,工作集或提交大小也不会真正超过500 MB。 是否有设置可以在任务管理器中实际显示服务器内存?还是它们更改了SQL Server中内存使用方式的结果


1
SQL Server如何知道谓词之间的关联?
在诊断基数估计不佳(尽管索引简单,统计信息最新等)并因此查询计划不佳的SQL Server 2008 R2查询时,我发现了一个可能相关的知识库文章: FIX:运行查询时性能不佳包含SQL Server 2008或SQL Server 2008 R2或SQL Server 2012中的关联AND谓词 我可以猜测知识库文章“关联”的含义,例如谓词2和谓词1主要针对相同的行。 但是我不知道SQL Server如何知道这些相关性。一个表是否需要一个包含来自两个谓词的列的多列索引?SQL是否使用统计信息来检查一列中的值是否与另一列相关?还是使用其他方法? 我问这个有两个原因: 确定使用此修补程序可以改善我的表和查询 知道我应该在索引编制,统计数据等方面做些什么来影响#1

3
通过代码创建新函数(如果不存在)
我想通过脚本在数据库中创建新功能。脚本代码如下: IF Exists(Select * From sys.sysobjects A Where A.name =N'fn_myfunc' and xtype=N'FN') return; CREATE FUNCTION fn_myfunc () returns varchar(10) AS Begin ... End 但是当我执行上述脚本时,SQL Server返回错误: 'CREATE FUNCTION' must be the first statement in a query batch.

4
主键中指定的排序顺序,但在SELECT上执行排序
我将传感器数据存储在表SensorValues中。该表和主键如下: CREATE TABLE [dbo].[SensorValues]( [DeviceId] [int] NOT NULL, [SensorId] [int] NOT NULL, [SensorValue] [int] NOT NULL, [Date] [int] NOT NULL, CONSTRAINT [PK_SensorValues] PRIMARY KEY CLUSTERED ( [DeviceId] ASC, [SensorId] ASC, [Date] DESC ) WITH ( FILLFACTOR=75, DATA_COMPRESSION = PAGE, PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = …

2
SQL Server中多个工作线程的FIFO队列表
我试图回答以下stackoverflow问题: 我应该使用哪种SQL Server 2005/2008锁定方法来处理多个服务器应用程序实例中的单个表行? 在发布一个有点天真的答案之后,我想我会把钱放在嘴边,实际上 测试我所建议的方案,以确保我不会像往常一样追逐OP。好吧,事实证明,这比我想象的要难得多(我敢肯定,这对任何人来说都不奇怪)。 这是我尝试过并想到的: 首先,我尝试使用派生表中的ORDER BY进行TOP 1 UPDATE ROWLOCK, READPAST。这产生了死锁,并且还处理了乱序的项目。它必须尽可能接近FIFO,以排除需要多次尝试处理同一行的错误。 然后,我尝试选择所需的下一个QueueID到一个变量,使用的各种组合READPAST,UPDLOCK,HOLDLOCK,并ROWLOCK专门由会话保持了更新的行。我尝试过的所有变体都遇到了与以前相同的问题,并且对于与的某些组合READPAST,抱怨如下: 您只能在READ COMMITTED或REPEATABLE READ隔离级别中指定READPAST锁。 这是令人困惑的,因为它是“已提交读”。我以前遇到过这个问题,这令人沮丧。 自从我开始写这个问题以来,Remus Rusani发布了一个新的问题答案。我阅读了他的链接文章,看到他正在使用破坏性读取,因为他在回答中说“在网络通话期间实际上不可能保持锁定状态”。在阅读了他的文章中有关热点和需要锁定才能进行任何更新或删除的页面的内容后,我担心即使我能够算出正确的锁定来执行我想要的操作,也无法扩展并且可能无法处理大量并发。 现在,我不确定该去哪里。是真的无法实现在处理行时维持锁定(即使它不支持高tps或大量并发)吗?我想念什么? 希望比我更聪明的人和比我更老练的人可以提供帮助,以下是我使用的测试脚本。它又切换回TOP 1 UPDATE方法,但是我也将另一种方法留在其中,注释掉,以防您也想探索一下。 将这些粘贴到单独的会话中,运行会话1,然后快速将所有其他会话粘贴。在大约50秒内,测试将结束。查看每个会话中的消息,以查看其所做的工作(或失败的方式)。第一个会话将显示一个带有快照的行集,第二个快照详细描述了存在的锁和正在处理的队列项。有时它可以工作,而其他时候则根本不工作。 第一场 /* Session 1: Setup and control - Run this session first, then immediately run all other sessions */ IF Object_ID('dbo.Queue', 'U') IS NULL CREATE …

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.