我有一个问题理解为什么 SQL 服务器决定为表中的每个值调用用户定义的函数,即使只应提取一行。实际的 SQL 要复杂得多,但我能够将问题简化为:
select
S.GROUPCODE,
H.ORDERCATEGORY
from
ORDERLINE L
join ORDERHDR H on H.ORDERID = L.ORDERID
join PRODUCT P on P.PRODUCT = L.PRODUCT
cross apply dbo.GetGroupCode (P.FACTORY) S
where
L.ORDERNUMBER = 'XXX/YYY-123456' and
L.RMPHASE = '0' and
L.ORDERLINE = '01'
Run Code Online (Sandbox Code Playgroud)
对于此查询,SQL Server 决定为 PRODUCT 表中存在的每个值调用 GetGroupCode 函数,即使从 ORDERLINE 返回的估计行数和实际行数为 1(它是主键):
显示行数的计划资源管理器中的相同计划:
表格:
ORDERLINE: 1.5M rows, primary key: ORDERNUMBER + ORDERLINE + RMPHASE (clustered)
ORDERHDR: 900k rows, primary key: ORDERID (clustered)
PRODUCT: 6655 rows, primary key: PRODUCT (clustered)
Run Code Online (Sandbox Code Playgroud)
用于扫描的索引是: …
我正在尝试建立一个医生预约系统,在线患者将有两个选择:
约束:
到目前为止我们完成的模型是基于创建一个如下所示的 Doctor Slot 表
如果 DoctorSlot 为 N 且 N=10 分钟,请考虑以下示例
案例 第一次 if(N*2)== Free 保留块两个插槽而不是一个
案例跟进 if(N)==Free Make Reservation Block 1 slot
示例医生:9:00 至 9:10 医生:9:10 至 9:20 医生:9:20 至 9:30
病例首次向患者展示 9:00 至 9:20
挑战:
问题:
请帮我解决这个安装问题。
我正在尝试在两个 Windows Server 2012 R2 VM 上安装 SQL Server 2016(SP1 集成)故障转移群集实例 (FCI)。
我有 3 个集群磁盘。
我首先尝试直接安装到这些根目录。失败后,我创建了要安装的子目录。服务帐户和我自己是 VM 的本地管理员,我明确授予对每个子目录的完全控制权。最后,我暂时尝试忽略挂载点,只安装到 E: 上的子目录。所有尝试都失败并出现以下错误。
详细结果:功能:数据库引擎服务状态:失败:有关详细信息,请参阅日志失败原因:在功能的设置过程中发生错误。下一步:使用以下信息解决错误,卸载此功能,然后再次运行安装过程。组件名称:
SQL Server 数据库引擎服务实例功能组件错误代码:0x84CF0004 错误描述:更新文件夹“E:\MSSQL\Data\TempDB1\System Volume Information”的权限设置时,文件“E:\MSSQL\Data\”的权限设置更新失败TempDB1\系统卷信息\ResumeKeyFilter.Store'。文件夹权限设置应该设置为 'D:P(A;OICI;FA;;;BA)(A;OICI;FA;;;SY)(A;OICI;FA;;;CO)(A; OICI;FA;;;S-1-5-80-419818685-2113908795-3893829424-1849583840-1690709397)'。错误帮助链接:http :
//go.microsoft.com/fwlink?LinkId=20476&ProdName=Microsoft+SQL+Server&EvtSrc=setup.rll&EvtID=50000&ProdVer=13.0.4001.0&EvtType=0x88792597%400x72597%400x720000000000x8000x8700x8700000
下面是用于安装的配置文件的匿名版本。
;SQL Server 2016 Configuration File
[OPTIONS]
ACTION="InstallFailoverCluster"
SUPPRESSPRIVACYSTATEMENTNOTICE="False"
IACCEPTROPENLICENSETERMS="False"
IAcceptSQLServerLicenseTerms="True"
ENU="True"
QUIET="False"
QUIETSIMPLE="True"
UpdateEnabled="True"
USEMICROSOFTUPDATE="False"
FEATURES=SQLENGINE,REPLICATION,FULLTEXT,DQ,CONN,BC,SDK,SNAC_SDK
UpdateSource="MU"
HELP="False"
INDICATEPROGRESS="True"
X86="False"
INSTANCENAME="InstName"
INSTALLSHAREDDIR="C:\Program Files\Microsoft SQL Server"
INSTALLSHAREDWOWDIR="C:\Program Files (x86)\Microsoft SQL Server"
INSTANCEID="InstName"
INSTANCEDIR="C:\Program Files\Microsoft SQL Server"
FAILOVERCLUSTERDISKS="Cluster Disk 7"
FAILOVERCLUSTERGROUP="SQL Server (InstName)"
FAILOVERCLUSTERIPADDRESSES="IPv4;10.10.10.17;Cluster …
Run Code Online (Sandbox Code Playgroud) 在 MySQL 5.6 中,我有大约 6000 万行。我想根据 Id 删除行。这里的Id是主键。
我今天有一个奇怪的行为。
delete from tbl where id=1;
Run Code Online (Sandbox Code Playgroud)
它以毫秒为单位执行。
然后我就这样做了。
CREATE TEMPORARY TABLE DELETE_ID (ID int);
Insert into DELETE_ID select id from (subery1(subquery2(subquery3)));
Run Code Online (Sandbox Code Playgroud)
DELETE_ID 大约有 150 个 ID。
Delete from tbl where id in (select id from DELETE_ID);
Run Code Online (Sandbox Code Playgroud)
花费了 30 多分钟,但删除了一行。
没有锁或死锁。
在 innodb_trx 中,状态有时是fetching rows
有时unlocking rows
。
谁能帮助我理解为什么会发生这种情况?
我正在 mysql 5.7 中试验 text 和 varchars。我创建了一个简单的 mysql 表,如下所示
创建表small_table
(pk
int(11) NOT NULL AUTO_INCRMENT,varc
varchar(255) DEFAULT NULL,txt
text, 首要的关键 (pk
) ) 引擎=InnoDB AUTO_INCRMENT=103925 默认字符集=utf8
该表大约有 100k 行。
我已经执行了以下查询并对两者进行了分析
查询 1(对 varchar 列进行分组)
通过varc从small_table组中选择varc,count(*);
配置文件 1 结果
+----------------------+----------+ | 状态 | 持续时间 | +----------------------+----------+ | 开始| 0.000064 | 0.000064 | 检查权限 | 0.000004 | | 开桌 | 0.004812 | | 初始化| 0.000026 | 0.000026 | 系统锁| 0.000005 | 0.000005 | 优化| 0.000006 | 0.000006 …
我有一个关于 SQL Server 2016 安装的问题。
我们安装了 2017/09/19 制作的试用版
根据我在数据库中执行的脚本,到期日期是 2018/03/18 但我们仍然可以毫无问题地使用它。
使用此数据库的 Sharepoint 站点不会给出任何错误或警告图例,说明它已过期或某些功能不再可用。我还可以从 MSQLServer Management Studio 进入并执行脚本、创建新数据库等。
怎样才能准确知道保质期?
SELECT
@@SERVERNAME as SERVERNAME,
CREATE_DATE as INSTALALTIONDATE,
SERVERPROPERTY('EDITION') as Version,
DATEADD(DD, 180, CREATE_DATE) AS "EXPIRY DATE"
FROM SYS.SERVER_PRINCIPALS
WHERE SID = 0X010100000000000512000000
SERVERNAME INSTALLATIONDATE Version EXPIRY DATE
SAHARCVSPS02 2017-09-19 13:15:20.967 Enterprise Evaluation Edition (64-bit) 2018-03-18 13:15:20.967
Run Code Online (Sandbox Code Playgroud) 我的任务是更新数据库中的几行。有两列,其中一列是ID
,另一列是CURRENCY
。我已经使用下面的更新语句更新了这些行:
update account set currency = 'INR' where id =15;
update account set currency = 'EURO' where id =12;
update account set currency = 'DOLLAR' where id =18;
update account set currency = 'Pound' where id =13;
-- and so on.
Run Code Online (Sandbox Code Playgroud)
实际上,在这种情况下,由于行数相对较少,我可以使用这些更新语句轻松完成,但是如果有数千或数十万行怎么办?这是更新它们的唯一方法,还是有其他方法或脚本?
我必须UPDATE
在具有 50 万条记录的实时在线数据库上运行一条语句。我想知道哪个语句运行得更快:
Update Table set REC_ID = isnull(REC_ID,'')
Update Table set REC_ID = '' where REC_ID is null
Run Code Online (Sandbox Code Playgroud)
我正在使用 Microsoft SQL Server 2012
我目前正在建立一个使用 MySQL 数据库的网站,该数据库拥有超过 4000 万行数据。我使用一台服务器存储文件和单独的 mysql 服务器。两台服务器有20核,64G内存。
同时,我可以看到在执行最长的 SQL 查询时,我的 MySQL 服务器最多使用两个内核,因此执行最长的查询需要超过 38 秒。看看下面的结果。
用户@主机:dev_data @ localhost []
查询时间:38.113460 锁定时间:0.000514
Rows_sent: 10 Rows_examined: 48683733
如何配置我的 MySQL 服务器,以便它使用所有 20 个内核来处理查询?MySQL 版本是 5.6。
在下面的结果之上。
我有10-15个大表,5GB到30GB。其余的都小于1GB。有些表数据很大,每天会产生 500 000 个死元组。大约 7 天后,当死亡元组超过 350 万个时,自动清理就会开始。该数据库大约有 60 个表。这里数据库的阈值是:20%。
我想将 autovacuum 阈值从 20% 更改为 1%。对系统性能有什么影响(因为对于较小的表,它会频繁运行)。maintanance_work_mem 和 work_mem 参数值应该是什么?
我在www.codemag.com/article/1208111 上阅读了一篇文章,并在 WHERE 子句中看到了将列与
Column1 <<<>> Column2
Run Code Online (Sandbox Code Playgroud)
和
Column1 <<<= Column2
Run Code Online (Sandbox Code Playgroud)
在清单 13 和清单 14 中的文章
那些是什么意思?
sql-server ×6
mysql ×2
postgresql ×2
update ×2
clustering ×1
delete ×1
innodb ×1
mount-point ×1
mysql-5.7 ×1
null ×1
optimization ×1
performance ×1
schema ×1
t-sql ×1
varchar ×1