数据库管理员

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


1
PostgreSQL 9.6中不需要的Nest Loop与Hash Join
我在PostgreSQL 9.6查询计划上遇到麻烦。我的查询如下所示: SET role plain_user; SELECT properties.* FROM properties JOIN entries_properties ON properties.id = entries_properties.property_id JOIN structures ON structures.id = entries_properties.entry_id WHERE structures."STRUKTURBERICHT" != '' AND properties."COMPOSITION" LIKE 'Mo%' AND ( properties."NAME" LIKE '%VASP-ase-preopt%' OR properties."CALCULATOR_ID" IN (7,22,25) ) AND properties."TYPE_ID" IN (6) 我为上述表启用了行级安全性。 使用set enable_nestloop = True,查询计划器将运行嵌套循环,其总运行时间约为37秒:https : //explain.depesz.com/s/59BR …


1
PostgreSQL启用扩展而无需超级用户
我有一台PostgreSQL 9.5服务器,在该服务器上有一些脚本可以自动为用户创建角色和数据库。在这些数据库中,启用特定的扩展(例如pgcrypto)将很有帮助,但是据我所知,它必须是超级用户才能运行CREATE EXTENSION。有没有一种方法可以启用此类扩展,而无需使用超级用户帐户手动登录?

4
在150维空间中进行快速最近邻居搜索
我想使用任何可能的RDBMS创建数据库。它将有一个大约150列的表格。目的是对某些其他对象执行最近邻搜索。因此,它是150维空间中的NNS。 我已经尝试使用一些显而易见的方法,例如L1或L2距离,但是对于具有多行的表,当然会花费很多时间。另外,我尝试查看KD树(请注意,我没有对其进行测试)和PG-Strom,但它们并不是多维数据的良好解决方案。 我可以使用数学方法(例如KD-tree)或技术方法(例如PG-Strom)以某种方式提高描述搜索的速度吗? 我将尝试使用允许提高NNS速度的任何RDBMS。但是MySQL和PostgreSQL是最适合我的DBMS。

2
为什么不能在同一条语句中更新插入CTE中的行?
在PostgreSQL 9.5中,给出了一个使用以下命令创建的简单表: create table tbl ( id serial primary key, val integer ); 我运行SQL插入一个值,然后在同一条语句中更新它: WITH newval AS ( INSERT INTO tbl(val) VALUES (1) RETURNING id ) UPDATE tbl SET val=2 FROM newval WHERE tbl.id=newval.id; 结果是UPDATE被忽略: testdb=> select * from tbl; ┌────┬─────┐ │ id │ val │ ├────┼─────┤ │ 1 │ …
13 postgresql  cte 

2
卡在管理工作室中的任务,您如何处理?
在Management Studio中单击“使数据库脱机”后,此消息将保持挂起状态,如果单击“关闭”,则不会关闭。 在Management Studio中处理此类卡住工作的好方法是什么?您可以通过活动监视器将其杀死吗?我是否应该寻找阻止该工作进行并终止的过程?
13 sql-server  ssms 

2
最佳数据建模方法,用于处理有关调查,问题和响应的数据库中的冗余外键
我正在寻找有关最佳关系建模方法以存储调查,问题和响应的建议。 我正在寻找以下两种方法中哪一种看起来最好,或者是另一种替代方法。 我至少有以下实体: 题 调查 人 至少这些关系: 每个调查有1个或多个问题。 每个问题可用于0个或更多调查中。 每个人可能进行0项或多项调查。 这是我遇到麻烦的地方:如何对个人调查问题的回答建模。 这是我考虑过的两种方法,对我来说都不是很好。此处的图已大大简化以说明问题。 方法1: 我不喜欢这种方法: 该survey_person_question_response表有两个引用调查的不同列:survey_question_survey_id和survey_person_survey_id 如果survey_id这两行在一行中引用了不同的,那将是一个错误。survey_question必须与接受survey_person的人来自同一调查。我看不出执行此操作的好方法。 似乎我在这里所做的是在两个关系之间建立关系。由于某种原因,我觉得这很不对劲。 方法二: 尝试避免方法1中的两个FK应该引用相同的值... 我不喜欢这种方法: 没有强制执行,question_id并且survey_idFK来自有效survey_question对 没有强制执行,survey_id并且person_idFK来自有效survey_person对 关于以下方面的任何建议: 这些方法之一是否是典型方法 这些方法之一相对于其他方法的利弊 更好地安排这些数据的更好方法 将不胜感激!

3
在SQL Server 2014中查询慢100倍,行计数假脱机行估计是罪魁祸首?
我有一个查询,该查询在SQL Server 2012中运行800毫秒,在SQL Server 2014中运行约170秒。我认为我已将其范围缩小到Row Count Spool运营商的基数估计不佳。我已经读过一些关于假脱机操作符的信息(例如,here和here),但是仍然难以理解以下几点: 为什么此查询需要Row Count Spool运算符?我认为正确性不是必需的,那么它试图提供什么特定的优化? 为什么SQL Server估计联接到Row Count Spool运算符会删除所有行? 这是SQL Server 2014中的错误吗?如果是这样,我将提交Connect。但是我想先加深了解。 注意:LEFT JOIN为了在SQL Server 2012和SQL Server 2014中都能达到可接受的性能,我可以将查询重新编写为或向表中添加索引。因此,此问题更多地是关于深入了解此特定查询和计划的,而较少涉及如何用不同的措词查询。 慢查询 有关完整的测试脚本,请参见此Pastebin。这是我正在查看的特定测试查询: -- Prune any existing customers from the set of potential new customers -- This query is much slower than expected in SQL Server 2014 SELECT …

4
MySQL InnoDB缓冲池实例的最佳数量
服务器特征 系统总内存:8GB(运行MySQL以及上面运行的MySQL以外的其他东西,即不专用于MySQL) CPU核心数:6 我在数据库中的数据量约为2GB 我将InnoDB缓冲池大小设置为4GB 哪个更好: Innodb缓冲池实例设置为1? Innodb缓冲池实例设置为2(每个实例2GB)? Innodb缓冲池实例设置为4(每个实例1GB)? Innodb缓冲池实例设置为8(默认设置) 因此,我不确定如何推理缓冲池实例,以及整个“在InnoDB缓冲池如此大的情况下使用实例或遭受OS交换”。

3
pg_restore:[存档]在文件头中找不到魔术字符串
我正在使用PostgreSQL 9.1,并希望还原使用生成的备份文件pg_dump: sudo pg_dump -h 127.0.0.1 -U postgres --clean --inserts -E UTF8 -f out.sql database_name 此命令生成一个有效的sql文件,该文件首先删除任何现有的数据库对象,然后生成所有表,索引,序列等,最后插入数据。 当我尝试使用以下方法还原生成的备份文件时:(添加换行符仅用于显示目的) sudo pg_restore -d database_name -h 127.0.0.1 -U postgres --format=c --clean --create out.sql 它失败并打印: pg_restore: [archiver] did not find magic string in file header 是什么原因呢?

2
在PostgreSQL中使用GIN索引时如何加快ORDER BY排序?
我有一个这样的表: CREATE TABLE products ( id serial PRIMARY KEY, category_ids integer[], published boolean NOT NULL, score integer NOT NULL, title varchar NOT NULL); 一个产品可以属于多个类别。category_ids列包含所有产品类别的ID列表。 典型查询如下所示(始终搜索单个类别): SELECT * FROM products WHERE published AND category_ids @> ARRAY[23465] ORDER BY score DESC, title LIMIT 20 OFFSET 8000; 为了加快速度,我使用以下索引: CREATE INDEX idx_test1 ON products …


2
如何在INSERT中处理auto_increment键(SELECT * FROM…)
我table1和table2MySQL中。两者都有一个主auto_increment键id。 如果表模式匹配,并且INSERT INTO table1 (SELECT * FROM table2)对插入到其中的新行该table1怎么办?难道他们保留他们原来的id价值和产生冲突时,从行table1具有相同的id?auto_increment是否生成新值?它取决于存储引擎还是锁定?

4
SQL Server-实例名称和实例ID之间的区别
我对SQL Server实例有些困惑。实例名称和实例ID是不同的属性,但是实例ID倾向于默认使用实例名称的大写形式。通过安装,您可以为ID设置一个与名称不同的值,尽管通常它们是相同的。 显然,ID是指内部引用,名称是指用户友好的引用。但是两者之间的根本区别是什么?什么时候应该使用而不是另一个? 在通过自定义安装过程在客户的服务器计算机上部署/安装SQL Server 2008 R2 Express时,我需要了解这一点。
13 sql-server 

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.