数据库管理员

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

5
在PostgreSQL中并发DELETE / INSERT锁定问题
这很简单,但是我对PG(v9.0)的功能感到困惑。我们从一个简单的表开始: CREATE TABLE test (id INT PRIMARY KEY); 和几行: INSERT INTO TEST VALUES (1); INSERT INTO TEST VALUES (2); 使用我最喜欢的JDBC查询工具(ExecuteQuery),我将两个会话窗口连接到该表所在的数据库。它们都是事务性的(即auto-commit = false)。我们称它们为S1和S2。 每个代码都使用相同的代码: 1:DELETE FROM test WHERE id=1; 2:INSERT INTO test VALUES (1); 3:COMMIT; 现在,以慢速运行此命令,一次在Windows中执行一次。 S1-1 runs (1 row deleted) S2-1 runs (but is blocked since S1 has a write …


8
INNER JOIN和OUTER JOIN有什么区别?
我是SQL新手,想知道这两种JOIN类型之间的区别是什么? SELECT * FROM user u INNER JOIN telephone t ON t.user_id = u.id SELECT * FROM user u LEFT OUTER JOIN telephone t ON t.user_id = u.id 什么时候应该使用其中一个?
35 join 

2
如果EXISTS花费的时间比嵌入的select语句长
当我运行以下代码时,需要22.5分钟的时间,并且需要进行1.06亿次读取。但是,如果我自己仅运行内部select语句,则只需15秒即可完成264k次读取。附带说明,select查询不返回任何记录。 知道为什么IF EXISTS它会使它运行更长的时间并进行更多的读取吗?我也将select语句更改为do,SELECT TOP 1 [dlc].[id]并在2分钟后将其杀死。 作为临时解决方案,我将其更改为执行count(*)并将该值分配给变量@cnt。然后它做一个IF 0 <> @cnt声明。但是我认为EXISTS会更好,因为如果select语句中返回了记录,则一旦找到至少一条记录,它将停止执行扫描/查找,而count(*)将会完成整个查询。我想念什么? IF EXISTS (SELECT [dlc].[ID] FROM TableDLC [dlc] JOIN TableD [d] ON [d].[ID] = [dlc].[ID] JOIN TableC [c] ON [c].[ID] = [d].[ID2] WHERE [c].[Name] <> [dlc].[Name]) BEGIN <do something> END


3
MD5字段的最佳数据类型是什么?
我们正在设计一个读取量很大的系统(每分钟读取数万次)。 有一个表names,可以作为一种中央注册表。每行都有一个text字段representation和一个唯一字段,该字段key是该字段的MD5哈希值representation。1该表当前具有数千万条记录,并且预计在应用程序的生命周期内将增长到数十亿条。 还有许多其他表(具有高度变化的模式和记录计数)引用该names表。这些表之一中的任何给定记录都保证有一个name_key,从功能上讲,该names表是该表的外键。 1:顺便说一句,正如您所料,此表中的记录一旦写入便是不可变的。 对于除表以外的任何给定表names,最常见的查询将遵循以下模式: SELECT list, of, fields FROM table WHERE name_key IN (md5a, md5b, md5c...); 我想针对读取性能进行优化。我怀疑我的第一站应该是最小化索引的大小(尽管我不介意在那里被证明是错误的)。 问题:和列 的最佳数据类型是什么? 有没有理由使用过?还是?keyname_keyhex(32)bit(128)BTREEGIN

4
获取PostgreSQL数据库表的最后修改日期
我试图通过检查表的文件修改日期(如本答案所述)来获取修改表的时间。但是结果并不总是正确的。更新表后,文件修改日期将在几分钟后更新。这是正确的行为吗?PostgreSQL是否将表修改存储在某些缓存中,然后将其刷新到硬盘上? 因此,如何获得表的正确上次修改日期(假设自动真空修改也可以)? 我在Linux Centos 6.2 x64下使用PostgreSQL 9.2。
35 postgresql 

4
我需要缩小数据库-我刚刚释放了很多空间
这里以各种形式提出了这个问题,但问题归结为: 我知道缩小数据库是有风险的。在这种情况下,我已经删除了太多数据,并且永远不会再使用它。 如何缩小数据库?我可以缩小哪些文件? 这样做时我应该考虑什么? 之后我应该做什么? 如果是大型数据库怎么办?我可以缩小一点吗?

3
是否可以在SQLite中存储和查询JSON?
我需要将JSON对象存储在SQLite数据库中,然后对它进行复杂的查询。 我做了一个这样的表: +--------------------------------------+ |document | property | string | number| +--------------------------------------+ |foo | "title" | "test" | | +--------------------------------------+ |foo | "id" | | 42 | +--------------------------------------+ |bar | "id" | | 43 | +--------------------------------------+ 对于两个对象 foo {"title": "test", "id": 42} bar {id: 43} 但是我无法执行“ AND”查询,例如: SELECT DISTINCT id FROM …
35 sqlite  json 

6
使用log_bin变量禁用MySQL二进制日志记录
一些debian软件包使用APT安装的默认MySQL配置文件/etc/mysql/my.cnf通常设置log_bin变量,因此启用了binlog: log_bin = /var/log/mysql/mysql-bin.log 当我想在这种安装上禁用二进制日志记录时,请当然在my.cnf工程中注释掉该行,但是我想知道是否有一种方法可以通过以debian风格将log_bin显式设置为OFF来禁用二进制日志记录,我的意思是包含的文件,例如/etc/mysql/conf.d/myCustomFile.cnf,因此默认的my.cnf不会更改,并且可以根据需要通过apt轻松更新。 我尝试了“ log_bin = 0”,“ log_bin = OFF”或“ log_bin =“,但是均无效...
35 mysql  logs  binlog  debian 


3
从外壳检查存储引擎
我正在升级到3.0,并且在升级时遇到了一些问题。具体地说,尝试mongod通过进行启动时遇到错误ssh,它尝试使用默认值,dbpath而不是我在新的YAML配置文件中指定的默认值。我继续并重新启动了计算机,现在又重新启动mongod并运行了。在这一点上,我有点偏执,想知道是否有一种方法可以确保存储引擎wiredtiger来自外壳程序。

1
在某些情况下,在JOIN子句中使用构造可以引入优化障碍吗?
引起我注意的是,查询子句中的USING构造(而不是ON)在某些情况下可能会引入优化障碍。FROMSELECT 我的意思是这个关键词: 选择 * 从一个 加入b 使用(a_id) 仅在更复杂的情况下。 背景:此评论到这个问题。 我用这个了很多,从来没有发现过这么远。我对一个展示效果或进一步信息的链接的测试案例非常感兴趣。我的搜索工作空虚。 USING (a_id)与替代连接子句相比,完美的答案是显示性能较差的测试用例ON a.a_id = b.a_id- 如果这确实可能发生。

2
选择集合中两列的位置
这可能是一个愚蠢的问题,我怀疑我无法做到这一点,但是SQL中是否有一种结构可以让我执行以下操作: SELECT whatever WHERE col1,col2 IN ((val1, val2), (val1, val2), ...) 我想选择两列成对出现的数据。 如果可能的话,我想避免使用子查询。
35 mysql  where 

1
我应该使用许多单字段索引而不是特定的多列索引吗?
这个问题是关于SQL Server索引技术的有效性的。我认为它被称为“索引交集”。 我正在使用一个存在许多性能和稳定性问题的现有SQL Server(2008)应用程序。开发人员对索引做了一些奇怪的事情。我无法获得有关这些问题的最终基准,也无法在互联网上找到任何非常好的文档。 表格上有许多可搜索的列。开发人员在可搜索列的每个EACH上创建了一个列索引。从理论上讲,SQL Server在大多数情况下将能够组合(相交)这些索引中的每一个以有效地访问表。这是一个简化的示例(实际表具有更多字段): CREATE TABLE [dbo].[FatTable]( [id] [bigint] IDENTITY(1,1) NOT NULL, [col1] [nchar](12) NOT NULL, [col2] [int] NOT NULL, [col3] [varchar](2000) NOT NULL, ... CREATE NONCLUSTERED INDEX [IndexCol1] ON [dbo].[FatTable] ( [col1] ASC ) CREATE NONCLUSTERED INDEX [IndexCol2] ON [dbo].[FatTable] ( [col2] ASC ) select * from …

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.