数据库管理员

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

3
使用ENUM和Integer类型的优缺点?
假设在某些随机表中,您有一列名为status的列。它的实际值将被启用或禁用。 将此列的数据类型设置为int / bool(1或零)还是ENUM将值enabled与and 一起使用会更好disabled吗?优点或缺点是什么? 假设您有4个,10个甚至更多个,而不仅仅是两个有效的状态?随着所需值数量的增加,优势和劣势会左右摇摆吗?

6
如何确定索引是必需的还是必需的
我一直在我们的MS SQL数据库上运行自动索引工具(我修改了源自Microsoft的脚本,该脚本查看索引统计表- 自动化自动索引)。现在,从统计信息中,我可以获得需要创建的索引的建议列表。 编辑: 上述索引从DMV那里获取信息,这些信息告诉您数据库引擎将使用哪些索引(如果索引可用),并且脚本采用Top x建议(按查找,用户影响等)并将它们放在表格中。 (上面的编辑部分摘自拉里·科尔曼(Larry Coleman)在下面的回答,以阐明脚本的作用。 由于我是数据库管理员的新手,并且已经在网上进行了快速搜索,因此我不愿意尝试并盲目添加推荐的索引。但是,由于没有该领域的经验,我正在寻找有关如何确定建议是否必要的建议。 我需要运行SQL事件探查器,还是最好检查查询表的代码?您还有其他建议吗?

11
SQL:SELECT除某些列外的所有列
SELECT除了特定列之外,是否有办法访问表中的所有列?从表中选择所有非blob或nongeometry列将非常方便。 就像是: SELECT * -the_geom FROM segments; 我曾经听说该功能被故意排除在SQL标准之外,因为更改向表中添加列将更改查询结果。这是真的?该论点有效吗? 有没有解决方法,尤其是在PostgreSQL中?

6
SQL Server Management Studio 18无法打开(仅弹出初始屏幕)
我只是在仅安装了VS2019的计算机上安装了SSMS 18 GA,当我尝试打开SSMS时,将显示启动屏幕,但随后该过程退出。 使用-log参数运行ssms会显示一条错误消息: 程序包[任务计划程序程序包]的CreateInstance失败源:'mscorlib'描述:无法加载文件或程序集'Microsoft.VisualStudio.Shell.Interop.8.0,版本= 15.0.0.0,区域性=中性,PublicKeyToken = b03f5f7f11d50a3a'或以下之一它的依赖关系。找到的程序集的清单定义与程序集引用不匹配。(来自HRESULT的异常:0x80131040)System.IO.FileLoadException:无法加载文件或程序集“ Microsoft.VisualStudio.Shell.Interop.8.0,版本= 15.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自HRESULT的异常:0x80131040)文件名:'Microsoft.VisualStudio.Shell.Interop.8.0,版本= 15.0.0.0,区域性=中性,PublicKeyToken = b03f5f7f11d50a3a'---> System.IO.FileLoadException:无法加载文件或程序集'Microsoft.VisualStudio.Shell.Interop.8.0,Version = 8.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自HRESULT的异常:0x80131040)文件名:'Microsoft.VisualStudio.Shell.Interop.8.0,版本= 8.0.0.0,区域性=中性,PublicKeyToken = b03f5f7f11d50a3a' WRN:程序集绑定日志记录已关闭。要启用程序集绑定失败日志记录,请将注册表值[HKLM \ Software \ Microsoft \ Fusion!EnableLog](DWORD)设置为1。注意:程序集绑定失败日志记录会降低性能。要关闭此功能,请删除注册表值[HKLM \ Software \ Microsoft \ Fusion!EnableLog]。 在System.Reflection.RuntimeAssembly.GetType(字符串名称,布尔throwOnError,布尔ignoreCase)在System.Reflection.RuntimeAssembly.GetType(RuntimeAssembly程序集,字符串名称,布尔throwOnError,布尔ignoCase,ObjectHandleOnStack类型)在System.Activator.CreateInstance(String assemblyString,字符串typeName,布尔值ignoreCase,BindingFlags bindingAttr,活页夹装订器,Object [] args,CultureInfo文化,Object [] ActivationAttributes,证据securityInfo,StackCrawlMark&stackMark),位于System.Activator.CreateInstance(字符串assemblyName,String typeName),位于System.AppDomain .CreateInstance(字符串assemblyName,字符串typeName) System.IO.FileLoadException:无法加载文件或程序集“ …
105 sql-server  ssms  ssms-18 

5
如何安全地更改MySQL innodb变量'innodb_log_file_size'?
因此,我对调优InnoDB相当陌生。我正在将表(如有必要)从MyIsam缓慢更改为InnoDB。我在innodb中有大约100MB,因此我将innodb_buffer_pool_size变量增加到128MB: mysql> show variables like 'innodb_buffer%'; +-------------------------+-----------+ | Variable_name | Value | +-------------------------+-----------+ | innodb_buffer_pool_size | 134217728 | +-------------------------+-----------+ 1 row in set (0.00 sec) 当我去更改innodb_log_file_size值时(例如,mysql的innodb配置页上的 my.cnf 注释将日志文件大小更改为缓冲区大小的25%。因此,现在,my.cnf如下所示: # innodb innodb_buffer_pool_size = 128M innodb_log_file_size = 32M 重新启动服务器时,出现以下错误: 110216 9:48:41 InnoDB:正在初始化缓冲池,大小= 128.0M 110216 9:48:41 InnoDB:已完成对缓冲池的初始化 InnoDB:错误:日志文件./ib_logfile0的大小不同0 5242880字节 InnoDB:与指定的大小不同.cnf文件0 33554432字节! 110216 9:48:41 …
105 mysql  innodb  myisam  logs 



3
ALTER TABLE-重命名列
这真让我发疯! 我想将博客表中的列从read-more重命名为read_more 我尝试了所有这些: ALTER TABLE blog RENAME COLUMN read-more to read_more; ALTER TABLE blog CHANGE COLUMN 'read-more' 'read_more' VARCHAR(255) NOT NULL; 我总是得到这个! ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near …
102 mysql  mysql-5.5  mysql-5 


6
为什么同时使用TRUNCATE和DROP?
在我工作的系统中,有许多使用临时表的存储过程和SQL脚本。使用这些表后,删除它们是一个好习惯。 我的许多同事(几乎所有的同事都比我经验丰富)通常会这样做: TRUNCATE TABLE #mytemp DROP TABLE #mytemp 我通常DROP TABLE在脚本中使用一个。 是否有充分的理由在a TRUNCATE之前立即进行DROP?

5
级联(ON DELETE / UPDATE)行为的良好解释
我不是每天都设计架构,但是当我这样做时,我会尝试正确设置级联更新/删除以简化管理。我了解级联的工作方式,但是我不记得哪个表是哪个表。 例如,如果我有两个表- Parent和Child-在Child该引用上具有外键Parent并具有ON DELETE CASCADE,则哪些记录触发级联,而哪些记录被级联删除?我的第一个猜测是Child删除Parent记录后记录会被删除,因为Child记录取决于Parent记录,但是记录ON DELETE不明确。它可能意味着删除Parent记录后删除记录Child,也可能意味着删除Child记录时删除记录Parent。那是什么呢? 我希望语法为ON PARENT DELETE, CASCADE,ON FOREIGN DELETE, CASCADE或类似的东西来消除歧义。有没有人记得这件事的助记符?

8
即使第一个参数不为NULL,SQL Server也会读取所有COALESCE函数吗?
我正在使用T-SQL COALESCE函数,其中第一个参数在运行的大约95%的时间内不会为null。如果第一个参数为NULL,则第二个参数将是一个漫长的过程: SELECT COALESCE(c.FirstName ,(SELECT TOP 1 b.FirstName FROM TableA a JOIN TableB b ON .....) ) 例如,c.FirstName = 'John'如果SQL Server仍然可以运行子查询? 我知道使用VB.NET IIF()函数,如果第二个参数为True,则代码仍会读取第三个参数(即使不会使用)。

7
Guid vs INT-作为主键哪个更好?
我正在阅读有关是否使用Guid和的原因int。 int体积更小,速度更快,易于记忆,并按时间顺序排列。至于Guid,我发现的唯一优势是它是独一无二的。在那种情况下,a Guid会比更好int,为什么? 从我所看到的来看,int除了数量上的限制外没有其他缺陷,在许多情况下这是无关紧要的。 为什么要精确Guid创建?实际上,我认为它除了用作简单表的主键外,还有其他用途。(是否有用于实际应用的示例Guid?) (Guid = UniqueIdentifier)SQL Server上的类型

5
存储与计算合计值
是否有任何准则或经验法则来确定何时存储合计值以及何时动态计算合计值? 例如,假设我有一些用户可以评价的小部件(请参见下面的架构)。每次我显示一个小部件时,我都可以从Ratings表中计算平均用户评分。或者,我可以在Widget表上存储平均评分。这样可以避免我每次显示窗口小部件时都必须计算评分,但是随后,用户每次对窗口小部件进行评分时,我都必须重新计算平均评分。 Ratings Widgets --------- ------- widget_id widget_id user_id name rating avg_rating <--- The column in question

4
在一系列时间戳上优化查询(两列)
我在Ubuntu 12.04上使用PostgreSQL 9.1。 我需要选择一段时间内的记录:我的表time_limits有两个timestamp字段和一个integer属性。我的实际表中还有其他列不涉及此查询。 create table ( start_date_time timestamp, end_date_time timestamp, id_phi integer, primary key(start_date_time, end_date_time,id_phi); 该表包含大约2M条记录。 进行以下查询需要花费大量时间: select * from time_limits as t where t.id_phi=0 and t.start_date_time <= timestamp'2010-08-08 00:00:00' and t.end_date_time >= timestamp'2010-08-08 00:05:00'; 所以我尝试添加另一个索引-PK的倒数: create index idx_inversed on time_limits(id_phi, start_date_time, end_date_time); 我感觉性能有所提高:访问表中间的记录的时间似乎更合理:介于40到90秒之间。 但是对于时间范围的中间值,仍然需要数十秒的时间。定位到表格末尾时(按时间顺序),则要多两倍。 我explain analyze第一次尝试获取此查询计划: Bitmap Heap …

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.