数据库管理员

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

1
寻求谓词与谓词之间的区别
我正在尝试性能调整SQL Server 2014 Enterprise中的查询。 我已经在SQL Sentry Plan Explorer中打开了实际的查询计划,并且可以在一个节点上看到它具有Seek谓词和Predicate。 Seek谓词和Predicate有什么区别? 注意:我可以看到此节点存在很多问题(例如,估计行与实际行,剩余IO),但问题与任何这些都不相关。

1
postgres-没有角色的pg_dump和pg_restore
我正在尝试在不具有接收数据库上适当角色的情况下还原转储。 如前所述这里也是在这里,你需要有--no-owner作为一个选项,无论是在pg_dump或pg_restore或两者 我使用以下命令行创建我的转储 "C:\Program Files\PostgreSQL\9.3\bin\pg_dump.exe" --no-owner -Ft --dbname=postgresql://avo******:AV0******?@127.0.0.1:5432/BI_DB > K:\BI\backup\sort\bck_%timestamp%.tar 恢复线如下 "C:\Program Files\PostgreSQL\9.3\bin\pg_restore.exe" --host localhost --port 5432 --username "postgres" --dbname "BI_TEST2" --no-password --no-owner --role=postgres --exit-on-error --verbose "D:\D\avo\backup\bck_04042017_1410.tar" 如您所见,两者都有--no-owner选择,但最终,我在下面出现了错误 令我感到困扰的是下面的日志 pg_restore: [programme d'archivage (db)] Erreur pendant le traitement de la TOC (« PROCESSING TOC ») : pg_restore: [programme d'archivage (db)] Erreur …

3
创建表时如何添加默认约束?SQL Server [关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 3年前关闭。 我正在尝试创建一个新表,其中包含各列及其后的约束,如下所示。 Create tblTest( columns.. .. .. Gender int, Constraint DF_tblTest_Gender Default 3 For Gender, .. .. .. ) 但是,我在默认约束附近收到一条错误消息,因为, 'for'附近的语法不正确

3
查找链接到PostgreSQL角色的对象
有时,我创建了一个名为user1(PostgreSQL 9.4.9)的PostgreSQL用户。 我要删除此用户。因此,我也首先撤销了对表,序列,函数,默认特权和所有权的所有权限: ALTER DEFAULT PRIVILEGES IN SCHEMA public REVOKE ALL ON SEQUENCES FROM user1; ALTER DEFAULT PRIVILEGES IN SCHEMA public REVOKE ALL ON TABLES FROM user1; ALTER DEFAULT PRIVILEGES IN SCHEMA public REVOKE ALL ON FUNCTIONS FROM user1; REVOKE ALL ON ALL SEQUENCES IN SCHEMA public FROM user1; REVOKE …

4
列出作业,计划和下一个计划的运行日期时间
列出作业,计划和下一个计划的运行日期时间 我正在尝试列出作业,计划和下一个计划的运行日期时间。但是,我似乎没有成功。 sysjobactivity 有next_scheduled_run_date,这是我需要的,但是我不知道将其连接到Job和Schedule。 如果还有其他方法sysjobactivity,请引导我到那里。 SELECT sj.name AS jobName , ss.name AS scheduleName , sja.next_scheduled_run_date FROM msdb.dbo.sysjobs sj INNER JOIN msdb.dbo.sysjobactivity sja ON sja.job_id = sj.job_id INNER JOIN msdb.dbo.sysjobschedules sjs ON sjs.job_id = sja.job_id INNER JOIN msdb.dbo.sysschedules ss ON ss.schedule_id = sjs.schedule_id WHERE (sj.name LIKE 'xray%') AND (sja.next_scheduled_run_date > GETDATE())

3
将逗号作为小数点分隔符的字符串数值转换为NUMERIC(10,2)
我有一个varchar列的SQL表,其中包含希腊格式的数字(。作为千位分隔符,而逗号作为十进制分隔符) 经典转换 CONVERT(numeric(10,2),REPLACE([value],',','.')) 不起作用,因为。(千位分隔符)杀死转换 例如尝试 CONVERT(numeric(10,2),REPLACE('7.000,45',',','.')) 我想将这些值转换为数字(10,2) 关于如何处理的任何建议?

2
MySQL索引维护
我做了很多有关如何在MySQL中维护索引以防止碎片并以某种方式优化查询执行的研究。 我熟悉该公式,该公式可计算表的最大可用空间与数据和索引使用的空间之间的比率。 但是我的主要问题仍然没有答案。也许这是由于我熟悉SQL Server中的索引维护,并且我倾向于认为在MySQL中它应该在某种程度上相似。 在SQL Server中,您可以具有多个索引,并且每个索引可以具有不同级别的碎片。然后,您可以选择一个并在该特定索引中执行“ REORGANIZE”或“ REBUILD”操作,而不会影响其余的索引。 据我所知,没有这种“表碎片”,并且SQL Server没有提供任何工具来修复“表碎片”。它确实提供了检查索引碎片的工具(可以理解为索引碎片使用的工具,例如索引所使用的页数与该页的填充度和连续性之间的比率),以及内部和外部碎片。 至少对于我来说,所有这些都是很容易理解的。 现在,当轮到在MySQL中维护索引时,如上所述,仅存在“表碎片”的概念。 MySQL中的一个表可以有多个索引,但是当我用那个著名的公式检查“碎片率”时,我看不到每个索引的碎片,而是整个表。 当我想优化MySQL中的索引时,我不选择要操作的特定索引(如SQL Server中一样)。相反,我在整个表中执行“ OPTIMIZE”操作,这大概会影响所有索引。 当在MySQL中优化表时,数据+索引使用的空间与整个空间之间的比率将减小,这表明硬盘驱动器中进行了某种物理重组,这意味着物理空间的减少。但是,索引碎片不仅与物理空间有关,而且与由于插入和更新而随时间变化的树的结构有关。 最后,我在InnoDB / MySQL中得到了一个表。该表具有300万条记录,105列和55个索引。它是1.5GB(不包括索引),后者是2.1GB。 每天都要对该表进行数千次点击以进行更新和插入(实际上,我们并未删除记录)。 该表已经创建多年,我可以肯定没有人维护索引。 我原本希望在那里找到一个巨大的碎片,但是当我按照规定执行碎片计算时 free_space / (data_length + index_length) 事实证明,我的碎片只有0.2%。恕我直言,这是非常不现实的。 因此,主要问题是: 如何检查MySQL中特定索引的碎片,而不是整个表格 OPTIMIZE TABLE是否像SQL Server一样实际修复了索引的内部/外部碎片? 当我在MySQL中优化表时,它实际上会重建表上的所有索引吗? 认为减少索引的物理空间(而不重建树本身)实际上转化为更好的性能是否现实?

3
从带有标题的CSV文件创建表
我正在寻找一种仅基于指定CSV内容生成新MySQL表的方法。我将使用的CSV文件具有以下属性; “ |” 定界的。 第一行指定列名称(标题),也为“ |” 定界的。 列名和顺序不固定。 列数不固定。 文件很大(100万行/ 50列)。 在Excel中,这非常简单,但是对于MySQL来说似乎并非如此(谷歌不走运)。对我应该看的东西有什么建议吗?
12 mysql  csv  import  bulk 

3
更改外键约束所需的最低特权是什么?
更改外键约束所需的最低特权是什么? MySQL 5.5.41修复此错误后,我的迁移脚本停止工作: InnoDB允许创建一个外键,该外键引用用户没有足够特权的父表。(缺陷号18790730) 我收到此错误: SQLSTATE [42000]:语法错误或访问冲突:对表'core.users'的用户'foo'@'localhost'拒绝了1142 REFERENCES命令(SQL:更改表`user_baz`添加约束user_baz_user_id_foreign外键(`user_id))引用用户`(`id`)上的`core`.`users(在更新级联上删除级联) 这意味着我需要修复特权。我需要的最低特权是什么?
12 mysql 

3
PostgreSQL过程语言开销(plpython / plsql / pllua…)
我正在尝试以过程语言性能来查找有关PostgreSQL 用户定义函数的信息,以执行实时任务。 它们与内置函数相比如何? (在开销方面)Postgres如何调用/管理plpython vs plpgsql vs pllua函数(我对Postgres集成/上下文/数据传输方面感兴趣,而不对VM本身感兴趣)有什么区别吗? 上下文是否有很大的开销?我可以使用它进行实时数据映射吗(假设每秒1000个查询) 用plpgsql和其他pg /语言编写用户定义的函数有什么好处?在文档中,它们列举了优点,但是我认为它们适用于所有postgresql过程语言。 相关发现: 非典型用法的PL语言的速度 PostgreSQL函数语言性能:C与PL / PGSQL

2
关系<table>的权限被拒绝
我在psql中运行了以下SQL: CREATE USER bspu LOGIN; CREATE DATABASE bsp OWNER bspu; GRANT ALL PRIVILEGES ON DATABASE bsp TO bspu; \c bsp CREATE TABLE users ( id SERIAL PRIMARY KEY, client_id VARCHAR(20) NOT NULL, api_key VARCHAR(100) NOT NULL, api_secret VARCHAR(100) NOT NULL, auth_token VARCHAR(128) NOT NULL ); 当我以身份登录bspu并尝试查询users表时,出现错误: permission denied for relation …

3
如何在一个查询中进行多个计数?
我用类似的查询来计数记录 SELECT COUNT(col1) FROM table1 WHERE col1 LIKE '%something%' SELECT COUNT(col1) FROM table1 WHERE col1 LIKE '%another%' SELECT COUNT(col1) FROM table1 WHERE col1 LIKE '%word%' 对于每个计数,mysql需要遍历整个表,如果表很长且有许多查询,这将是一个大问题。 我想知道是否有一种方法可以在一个查询中进行所有计数。在这种情况下,当mysql遍历每一行时,它将处理所有计数,而无需一遍又一遍地扫描整个表。

1
SQL Server错误“缺少序列号2的族”
我正在尝试还原服务器上的本地数据库,但是备份出现问题。我做了一个文件.bak,但是每次尝试将其加载到服务器上时,它都不允许我这样做。 这是我收到的错误消息的屏幕截图: 我读到可以RESTORE LABELONLY用来还原文件,但仍然无法正常工作,每次运行该文件时,我都会得到以下信息: 无法打开备份设备'C:\ Program Files \ Microsoft SQL Server \ MSSQL10_50.JOSEMA \ MSSQL \ Backu \ INNOVA-T.bak'。操作系统错误3(未能为此错误检索文本。原因:15105)。消息3013,级别16,状态1,第1行 RESTORE LABELONLY正在异常终止。 任何帮助都会很棒。谢谢。

2
Postgres JOIN条件与WHERE条件
Postgres新手在这里。 我想知道此查询是否已优化?我尝试仅加入100%必需的值,并将所有动态条件保留在WHERE子句中。见下文。 SELECT * FROM myapp_employees JOIN myapp_users ON myapp_users.user_id=myapp_employees.user_id JOIN myapp_contacts_assoc ON myapp_contacts_assoc.user_id=myapp_users.user_id JOIN myapp_contacts ON myapp_contacts.contact_id=myapp_contacts_assoc.contact_id WHERE myapp_contacts.value='test@gmail.com' AND myapp_contacts.type=(1)::INT2 AND myapp_contacts.is_primary=(1)::INT2 AND myapp_contacts.expired_at IS NULL AND myapp_employees.status=(1)::INT2 AND myapp_users.status=(1)::INT2 LIMIT 1; 注意:对于上下文,此proc正在检查用户是否也是雇员(特权/不同用户类型)。 无论如何,这是正确的方法吗?例如,JOIN ON是否应该包含更多的语句,例如检查是否为expired_at IS NULL?为什么或为什么这没有道理?

2
MySQL-删除具有外键约束且引用自身的行
我有一个表,用于存储用户在我的网站上发布的所有论坛消息。消息层次结构是使用嵌套集模型实现的。 以下是该表的简化结构: ID(主键) Owner_Id(对ID的外国主要参考) Parent_Id(对ID的外国主要参考) 左 好吧 级别 现在,表格看起来像这样: + ------- + ------------- + -------------- + ---------- + ----------- + ----------- + | Id | Owner_Id | Parent_Id | nleft | nright | nlevel | + ------- + ------------- + -------------- + ---------- + ----------- + ----------- + | 1 …

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.