数据库管理员

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

2
你能解释这个执行计划吗?
碰到这个东西时,我正在研究其他东西。我正在生成包含一些数据的测试表,并运行不同的查询,以了解不同的写查询方式如何影响执行计划。这是我用来生成随机测试数据的脚本: IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID('t') AND type in (N'U')) DROP TABLE t GO CREATE TABLE t ( c1 int IDENTITY(1,1) NOT NULL ,c2 int NULL ) GO insert into t select top 1000000 a from (select t1.number*2048 + t2.number a, newid() b from [master]..spt_values …

2
如何创建索引以加快对表达式的聚合LIKE查询?
我可能在标题中提出了错误的问题。这是事实: 我的客户服务人员一直抱怨在基于Django的站点的管理界面上进行客户查找时响应速度慢。 我们正在使用Postgres 8.4.6。我开始记录慢速查询,并发现了这个罪魁祸首: SELECT COUNT(*) FROM "auth_user" WHERE UPPER("auth_user"."email"::text) LIKE UPPER(E'%deyk%') 此查询最多需要32秒才能运行。这是EXPLAIN提供的查询计划: QUERY PLAN Aggregate (cost=205171.71..205171.72 rows=1 width=0) -> Seq Scan on auth_user (cost=0.00..205166.46 rows=2096 width=0) Filter: (upper((email)::text) ~~ '%DEYK%'::text) 因为这是由Django ORM从Django Admin应用程序生成的Django QuerySet中生成的查询,所以我对该查询本身没有任何控制权。索引似乎是合理的解决方案。我尝试创建索引来加快速度,但是并没有什么不同: CREATE INDEX auth_user_email_upper ON auth_user USING btree (upper(email::text)) 我究竟做错了什么?如何加快查询速度?


1
默认情况下,mysqldump是否导出索引?
我打得四处少许使用mysqldump,我想知道,如果它的出口指数(FULLTEXT,INDEX,...),默认情况下。我仔细阅读,发现了这个选项: --disable-keys, -K 这表明它确实确实导出了索引。但是我不想相信自己的解释,而是想确保自己理解正确(或错误;-)。谁能确认?


3
如何在phpMyAdmin中将mysql表自动递增重置为1?
我知道在MySQL的命令行中,我可以通过以下方式将表的自动增量字段重置为1: ALTER TABLE tablename AUTO_INCREMENT = 1 我很好奇是否有办法从phpMyAdmin中执行此操作。是像复选框一样重置自动增量的东西,还是类似这些东西的东西? 并不是说命令行方法有什么问题。我一直在思考的其中一项好奇心事...提前致谢!

2
如何将调试按钮添加到SSMS v18?
该Debug按钮位于此版本的SSMS中: 但是它在版本18预览4中不存在: 我尝试了几种方法将Debug按钮添加到我的SSMS中,但未成功。 是否可以将Debug按钮添加到SSMS v18?
20 sql-server  ssms 

6
SQL Server是否支持GREATEST和LEAST,如果不是,通常的解决方法是什么?
回顾这个问题,似乎不需要做很多工作。他们正在尝试扩大日期范围。在其他数据库中,您只需使用greatest和least.. least(extendDate,min), greatest(extendDate,max) 当我尝试使用这些时,我得到 'least' is not a recognized built-in function name. 'greatest' is not a recognized built-in function name. 那将覆盖任一方向的延伸。 出于问题的目的,您仍然必须进行排他性范围替换。 我只是想知道SQL Server用户如何实现查询模式来模仿least和greatest功能化。 PostgreSQL GREATEST/LEAST MySQL的GREATEST/LEAST 玛丽亚数据库 GREATEST LEAST DB2 GREATEST LEAST 甲骨文 GREATEST LEAST 您是否将条件展开为CASE语句,或者是否有Microsoft的扩展程序,第三方加载项或许可证来启用此功能?

2
SQL INDEX-它是如何工作的?
我对数据库和SQL的了解大部分是基于大学课程。无论如何,我在一家正在使用数据库的公司里呆了几个月(差不多一年)。 我读过一些书,我已经在一些培训参加有关的数据库,例如MySQL,PostgreSQL,SQLite,Oracle和几个同样nonSQL dbS,从而我们MongoDB,Redis,ElasticSearch等。 就像我说的那样,我是乞gg,因为他缺乏很多知识,但是今天,有人告诉了我什么,这完全违背了我的乞gg的知识。 让我解释。让我们以SQL数据库为例,创建一个Person内部表很少的简单表: id | name | age ----------------- 1 | Alex | 24 2 | Brad | 34 3 | Chris | 29 4 | David | 28 5 | Eric | 18 6 | Fred | 42 7 | Greg | 65 8 | Hubert | …
19 index 

3
当您搜索字符串的中间而不是开头时,这叫什么?
我正在努力提高词汇量,以更好地与开发人员交流。我们在站点中有几个地方要辩论,是否应该从头开始搜索字符串,而不是字符串中的'running%'任何位置'%running%。 我一直称中间搜索为“模糊”,我意识到这是不正确的,因为模糊意味着更改单词“运行”,“运行” [sic],“运行” [sic]的形式。 搜索字符串开头和字符串中间的正确术语是什么?

1
为什么简单循环会导致ASYNC_NETWORK_IO等待?
在使用SSMS v17.9的计算机上,以下T-SQL大约需要25秒: DECLARE @outer_loop INT = 0, @big_string_for_u VARCHAR(8000); SET NOCOUNT ON; WHILE @outer_loop < 50000000 BEGIN SET @big_string_for_u = 'ZZZZZZZZZZ'; SET @outer_loop = @outer_loop + 1; END; ASYNC_NETWORK_IO根据sys.dm_exec_session_wait_stats和,它累计532毫秒的等待时间sys.dm_os_wait_stats。总的等待时间随着循环迭代次数的增加而增加。使用wait_completed扩展事件,我可以看到等待大约每43毫秒发生一次,但有一些例外: 另外,我可以获得在ASYNC_NETWORK_IO等待之前发生的调用堆栈: sqldk.dll!SOS_DispatcherBase::GetTrack+0x7f6c sqldk.dll!SOS_Scheduler::PromotePendingTask+0x204 sqldk.dll!SOS_Task::PostWait+0x5f sqldk.dll!SOS_Scheduler::Suspend+0xb15 sqllang.dll!CSECCNGProvider::GetBCryptHandleFromAlgID+0xf6af sqllang.dll!CSECCNGProvider::GetBCryptHandleFromAlgID+0xf44c sqllang.dll!SNIPacketRelease+0xd63 sqllang.dll!SNIPacketRelease+0x2097 sqllang.dll!SNIPacketRelease+0x1f99 sqllang.dll!SNIPacketRelease+0x18fe sqllang.dll!CAutoExecuteAsContext::Restore+0x52d sqllang.dll!CSQLSource::Execute+0x151b sqllang.dll!CSQLSource::Execute+0xe13 sqllang.dll!CSQLSource::Execute+0x474 sqllang.dll!SNIPacketRelease+0x165d sqllang.dll!CValOdsRow::CValOdsRow+0xa92 sqllang.dll!CValOdsRow::CValOdsRow+0x883 sqldk.dll!ClockHand::Statistic::RecordClockHandStats+0x15d sqldk.dll!ClockHand::Statistic::RecordClockHandStats+0x638 sqldk.dll!ClockHand::Statistic::RecordClockHandStats+0x2ad …
19 sql-server  ssms 

2
Windows OS Quantum与SQL OS Quantum
简单问题 SQL Server Quantum(4 ms)如何与Server OS Quantum(通常为187.5 ms)同步? 简单问题解释 使用184 ms的OS量(相当于46个完整的SQL量)后,OS量需要3.5 ms的时间才能将计划移交给其他进程。SQL OS启动一个量子(4毫秒),然后在3.5毫秒之后,OS量子决定停止当前的SQL OS线程,该线程在产生调度之前还有0.5 ms。现在会发生什么? 深入了解OS Quantum 在接下来的两节中,我将写出到目前为止我发现的有关OS量子以及如何计算量子持续时间的内容。操作系统“量子”的持续时间基于“滴答”,“滴答”本身的持续时间基于“时钟间隔”,通常为15.625000毫秒。但是让我详细说明一下... 蜱 在Blog文章Know Thy Tick中,作者Jim解释了时钟间隔(也称为“滴答声”)的基本知识以及它们的用途。 当我读到诸如“大多数x86多处理器的时钟间隔……约为15毫秒”之类的信息时,我被迫确定时钟间隔或“滴答”间隔的值。幸运的是,我在Windows Internals Third Edition中读到此书的那本书为帮助我缓解痛苦提供了参考。...上述书籍的作者Mark Russinovich慷慨地在其网站上提供了ClockRes实用程序。运行此实用程序,我可以确定x86多处理器PC上的时钟间隔为15.625000 ms。有趣,但是我好奇的心想知道更多。 量子 本文的作者在第二篇文章中继续进行解释 那... 当然,滴答间隔很重要的真正原因是它会影响线程调度。Windows调度程序为每个线程分配了一个“量子”时间来执行,然后才允许以相同优先级运行另一个任务。调度程序分配给线程的数量是滴答间隔的倍数。为特定线程选择的特定量子值超出了本文的讨论范围。 好的,所以我知道一个量子是什么,但不知道一个量子将运行多长时间。 现在,让我们仅检查XPe中前景线程的默认量子值。在这种情况下,Windows调度程序会分配18或6个滴答间隔的量。(是的,要将量子转换为刻度间隔,必须将其除以3。...,但是倍数的原因是使调度程序能够“充电”线程以执行导致其挂起的操作。) 现在我们知道时钟间隔(滴答)应该在15.625000毫秒左右,并且在Windows桌面操作系统上,默认的时间间隔是18,这将导致6滴答或93.750000毫秒(18/3 * 15.625000毫秒)。 在Windows Server OS上,默认范围是不同的。“处理器调度”设置设置为“后台服务” 可以通过“系统设置|高级(选项卡)|性能(部分)|设置...”找到此设置,这将打开“性能选项|高级(选项卡)|处理器调度” 然后,默认的量子设置为36(背景)至36(前景)。量子更大,因此更长。这是Windows桌面操作系统上18(6个刻度)量子前台设置的93.750000 ms的两倍,在Windows Server OS上为后台服务设置的该值约为187.500000 ms。 观察/解释 当您在服务器或台式机上将设置从“后台服务”更改为“应用程序”时,注册表中的HKLM \ SYSTEM …
19 sql-server 

4
从列表中查找表中不存在的ID
说我有以下架构和数据: create table images( id int not null ); insert into images values(1), (2), (3), (4), (6), (8); 我想执行如下查询: select id from images where id not exists in(4, 5, 6); 但这是行不通的。上面的情况应该返回5,因为它在表记录中不存在。

4
SQL递归实际上如何工作?
来自其他编程语言的SQL,递归查询的结构看起来很奇怪。一步一步地走,它似乎崩溃了。 考虑以下简单示例: CREATE TABLE #NUMS (N BIGINT); INSERT INTO #NUMS VALUES (3), (5), (7); WITH R AS ( SELECT N FROM #NUMS UNION ALL SELECT N*N AS N FROM R WHERE N*N < 10000000 ) SELECT N FROM R ORDER BY N; 让我们来看一看。 首先,执行锚成员并将结果集放入R。因此R初始化为{3,5,7}。 然后,执行降到UNION ALL以下,并且第一次执行递归成员。它在R上执行(即在我们当前拥有的R上:{3,5,7})。结果为{9,25,49}。 这个新结果如何处理?是否将{9,25,49}附加到现有的{3,5,7}上,标记结果并集R,然后从那里进行递归?还是将R重新定义为仅此新结果{9,25,49},然后再进行所有合并? 两种选择都没有道理。 如果R现在为{3,5,7,9,25,49}并且执行递归的下一个迭代,那么我们将以{9,25,49,81,625,2401}结束,并且失去了{3,5,7}。 如果现在R仅是{9,25,49},则存在标签错误的问题。R被理解为锚定成员结果集与所有后续递归成员结果集的并集。而{9,25,49}只是R的一个组成部分。到目前为止,我们还没有获得R的全部。因此,将递归成员写为从R中选择是没有意义的。 …

1
依靠INSERT的OUTPUT子句的顺序是否安全?
给定此表: CREATE TABLE dbo.Target ( TargetId int identity(1, 1) NOT NULL, Color varchar(20) NOT NULL, Action varchar(10) NOT NULL, -- of course this should be normalized Code int NOT NULL, CONSTRAINT PK_Target PRIMARY KEY CLUSTERED (TargetId) ); 在两种略有不同的方案中,我想插入行并从标识列返回值。 场景1 INSERT dbo.Target (Color, Action, Code) OUTPUT inserted.TargetId SELECT t.Color, t.Action, t.Code …

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.