数据库管理员

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

2
如何最好地将Google ngram存储在数据库中?
我几天前下载了Google onegrams,它已经是大量数据了。我将10个软件包中的第一个插入mysql,现在我有一个4,700万个记录数据库。 我想知道如何最好地将Google ngrams存储在数据库中。我的意思是,如果您不使用一克,而是两克或三克,则金额将大得多。我可以在一个数据库中存储5亿条记录并使用它,还是应该将其拆分到不同的表中? 在将一条记录分割成几条记录之后,又如何最好地对其进行分割(考虑到twogram具有100个文件,因此大约有50亿条记录)?是否建议使用MySQL水平分区还是建立自己的分区(例如,通过word => twograms_a的第一个字符)。

4
如何进一步优化此MySQL查询?
我的查询要花特别长的时间(15+秒),并且随着时间的推移,随着数据集的增长,查询只会变得越来越糟。我过去对此进行了优化,并添加了索引,代码级排序和其他优化,但是还需要进一步完善。 SELECT sounds.*, avg(ratings.rating) AS avg_rating, count(ratings.rating) AS votes FROM `sounds` INNER JOIN ratings ON sounds.id = ratings.rateable_id WHERE (ratings.rateable_type = 'Sound' AND sounds.blacklisted = false AND sounds.ready_for_deployment = true AND sounds.deployed = true AND sounds.type = "Sound" AND sounds.created_at > "2011-03-26 21:25:49") GROUP BY ratings.rateable_id 查询的目的是让我获得sound id以及最近发布的声音的平均评分。大约有1500种声音和200万种评级。 我有几个指数 sounds …

1
Oracle中的物化视图
在oracle中如何实现物化视图?我已经在oracle中创建了一个物化视图。我现在看到的是一张很正常的工作表。物化视图是否在oracle中转换为表和作业?
9 oracle  view 

1
破坏和还原镜子
我必须在镜像的辅助节点上进行一些维护。由于这是站点变慢的结果,而在短暂的网络中断后重新建立镜像时,我想确保安全并禁用该镜像,然后在完成对有问题的服务器的拨入操作后重新启用它。 我目前的计划是: 禁用镜子 进行潜在的危险故障排除 恢复所有丢失的事务日志 重新建立镜子 这是断开/重新建立镜像的最安全方法吗?有什么我应该注意的陷阱吗?

3
在Management Studio T-SQL查询中指定连接
当将用户添加为数据库服务器的角色时,我经常使用GUI中的“为此操作编写脚本”功能。然后,我只需转到“连接::更改连接”即可在其他服务器上执行相同的操作。 有没有一种方法可以在脚本操作中指定连接,因此不必执行第二个“更改连接”步骤?

2
在Server Management Studio中显示查询计划
另一个SQL Server问题:自计数器重置以来,我有一个简单的查询,该查询为我提供了最多CPU密集型SQL: select top 10 sum(qs.total_worker_time) as total_cpu_time, sum(qs.execution_count) as total_execution_count, qs.plan_handle, st.text from sys.dm_exec_query_stats qs cross apply sys.dm_exec_sql_text(qs.plan_handle) as st group by qs.plan_handle, st.text order by sum(qs.total_worker_time) desc 问题1:究竟是什么plan_handle?它似乎不是计划的哈希,就像在Oracle中一样。我问是因为我希望能够发现陈述计划发生变化的情况。 问题2:一旦有了plan_handle,我会对实际计划感兴趣。因此,例如: select * from sys.dm_exec_query_plan (0x060006001F176406B8413043000000000000000000000000) 在query_plan列中,我获得了一个链接,单击该链接可显示XML文档。如果将它保存为磁盘上的what.sqlplan,则可以在Windows中双击它,并在Management Studio中正确显示。肯定有某种方法可以避免此步骤吗? 问题3:有没有办法像过去的SET SHOWPLAN_TEXT一样将XML转换回文本格式?我希望能够以图形方式查看它们,还希望以某种有意义的方式自动对它们进行比较。 谢谢!

4
为什么MySQL会说我内存不足?
我试图INSERT...SELECT用JDBC在MySQL中执行相当大的操作,但出现以下异常: Exception in thread "main" java.sql.SQLException: Out of memory (Needed 1073741824 bytes) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073) 由于我实际上没有返回ResultSet对象,因此我认为Java堆空间应该不是问题。但是,无论如何,我都尝试将其调高,但效果不好。然后,我尝试在MySQL Workbench中执行该语句,并且得到了基本上相同的东西: Error Code 5: Out of memory (Needed 1073741816 bytes) 我应该有足够的RAM来完成这些操作(足以容纳要从中选择的整个表),但是我猜测我需要调整各种设置以利用我的所有内存。我正在使用Windows Server 2008 AMI 运行Amazon EC2 高内存双超大实例。我尝试摆弄my.ini文件以使用更好的设置,但就我所知,我可能会使情况变得更糟。这是该文件的转储: [client] port=3306 [mysql] default-character-set=latin1 [mysqld] port=3306 basedir="C:/Program Files/MySQL/MySQL Server 5.5/" datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/" character-set-server=latin1 default-storage-engine=INNODB sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" max_connections=100 query_cache_size=1024M …

2
如何有效地实现分页?
我有一个数据库查询,可能会导致结果集很大。显示数据的客户端通过网络接收数据,因此,其想法是通过仅从数据库中检索前50个结果并将其发送给客户端,以最大程度地减少传输的数据量。然后,我将提供一个可能性,跳到第二页以检索下一个50个结果,等等(类似于Google提供的内容) 问题是实现分页的有效方法是什么。我想确保mssql尽可能多地使用缓存,并且每次更改分页时都不会再次执行该缓存。 同时有更多客户端正在查询数据库。使用的SQL引擎:MS SQL 2005 我的想法是: 使用准备好的sql statemenst以确保执行计划共享 使用ROW_COUNT变量仅检索所需的行 但这真的是最有效的方法吗?还是您认为最好检索整个结果集并在将数据发送到客户端的代码中实现分页? 谢谢您的提示! 问候,托马斯

2
如何使用临时表或表变量将SQL Server存储过程迁移到Oracle?
受管理层鼓励的C#开发人员编写SQL Server存储过程时,通常会产生这样的过程 create table #t1 (...); insert into #t1 Select ... from table_a where ...; insert into #t1 Select ... from table_b where ...; update #t1 Set ... = ... where ... Select * from #t1; 单个语句非常简单,这种方法使它们产生正确的结果。 通常,我的任务是将此类过程迁移到Oracle。 让我们面对以下事实。 SQL Server中的不同临时表是完全独立的,可以具有任何临时结构。 Oracle全局公用表是全局对象,并且所有共享表都使用相同的表结构。修改此结构是不可能的,尽管它可以在任何地方使用。 我从Oracle dba中学到的一件事是避免在可能的情况下使用临时表。这样的修改甚至可以提高SQL Server的性能。 用活接头替换单个插件 在最简单的情况下,以上内容可以转换为 select case when …

4
如何设计一个关系数据库表来存储友谊关系?
我想设计一个表来存储我的Web项目中的友谊关系 它至少应满足以下四个条件: 发送添加好友请求的人,例如(如果从A到B,则此列为A) 谁收到添加朋友的请求,例如(如果从A到B,则此列为B) 当前状态,例如(0表示拒绝,1表示接受,2表示未处理 我们的朋友关系是双边的 如果您有任何经验,欢迎任何建议 我当前的设计(我认为现在很糟糕)是这样的, 这些是专栏 frienshipId fromUserId toUserId status requestTime

1
如何为SQL Server重写为Oracle编写的触发器?
如何为SQL Server重写最初为Oracle编写的触发器? 这是我的Oracle触发代码: CREATE OR REPLACE TRIGGER P000KUL_TEST BEFORE INSERT ON P000KUL REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW BEGIN SELECT TO_CHAR(SYSDATE, 'dd/mm/RRRR') INTO :NEW.SYSTEM_DATE FROM DUAL; SELECT TO_CHAR(SYSDATE, 'hh:mi') INTO :NEW.SYSTEM_TIME FROM DUAL; END;

3
多个Oracle实例-这是一个好习惯吗?
我的一位客户将我们产品的数据库部署到了已经有3个Oracle实例的Solaris计算机上。因此,现在有4个Oracle实例在同一台计算机上运行。现在,我们遇到了性能问题。 我无权访问其他实例或计算机,并且我拥有的所有工具都是alert.log,AWR和ADDM。我知道有些情况与多个实例有关,但我无法证明这一点。 所以,我的问题是,您是否遇到过类似情况?我应该如何处理?如何确定与多个实例相关的性能问题的原因?

1
如何将Oracle数据库的内容导入Visio以创建实体关系图?
我有一个Oracle数据库,我想在Visio 2007 Pro中创建一个ERD。 到目前为止,我已经看过DBMS_METADATA.GET_DDL命令来生成DDL。我知道我可以将Access DB导入Visio,但是Access似乎可以理解与Oracle不同的SQL方言,因此我需要调整每个Create Table命令以更改数据类型。 在Visio Pro 2007中是否有使用DDL创建ERD的简单方法?
9 oracle  import  erd  ddl  visio 

2
SQL Server不应该支持RANGE吗?
作为开发网站并执行一些SQL Server的人,对我来说,SQL Server应该支持一个简单的子句(表明结果只包括特定范围的行)对我来说似乎并不费脑子。例如,第30到39行。 就目前而言,当SQL Server中的主要工作重点不是SQL时,实际上在许多Web开发人员的能力范围内实现了分页。 另外,它将大大简化由于联接和其他条件而可能已经很复杂的查询。 最重要的是,我认为这样的子句可能会随着时间的流逝而在内部进行优化的机会更大,因为该逻辑完全在Microsoft的控制之下。 不久前,我在另一个论坛上提出了这个问题,许多答复似乎表明这是不可取的。 假设所有现有的分页技术都将保留不变,那么不添加此类子句的可能原因是什么?对于像我这样的人来说,那就更好了。 任何人都可以以充分的理由说明为什么微软没有这样做吗?

4
如何使用注释对PostgreSQL模式进行版本控制?
我使用Git控制大部分工作:代码,文档,系统配置。之所以能够做到这一点,是因为我所有有价值的工作都存储为文本文件。 我也一直在为Postgres数据库编写和处理许多SQL模式。该模式包括视图,SQL函数,我们将使用R编程语言(通过PL / R)编写Postgres函数。 我试图复制和删除我和我的协作者编写的块模式,但是我忘记这样做了。复制和过去操作是重复的,并且容易出错。 pg_dump / pg_restore方法将不起作用,因为它会丢失注释。 理想情况下,我希望有某种方法可以将当前模式提取到一个或多个文件中并保留注释,以便进行版本控制。 带有注释的版本控制架构的最佳实践是什么?

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.