SQL SERVER
表如果已存在则删除
2016开始
DROP TABLE IF EXISTS dbo.Scores
2016之前
IF OBJECT_ID('tempdb..#tempdbname') IS NOT NULL --Remove dbo here
DROP TABLE #tempdbname
通过表锁优化批量插入和删除性能
delete dbo.myTbl with(tablock)
删除时添加表锁,可以确保让删除释放的空间还给数据库。参考
insert into dbo.myTbl with(tablock) select * from aaa
批量插入有时执行计划不会启用并发,添加表锁参数后就能并发,如果大表且有索引的话,并发会快很多
sql单线执行
有时候涉及表扫描的大批量io查询,默认开启并发查询对物理磁盘读写并不友好,不如单线程读写效率高
maxdop 1
强制全表扫描,不走索引
TABLE HINT( [pub].[wx].[table1], FORCESCAN)
强制启用批量insert模式,避免单条insert
QUERYTRACEON 8790
强制开启并行执行
OPTION(QUERYTRACEON 8649)
参考 https://www.mssqltips.com/sqlservertip/4939/how-to-force-a-parallel-execution-plan-in-sql-server-2016/
强制并行查询计划parallelism
OPTION(USE HINT('ENABLE_PARALLEL_PLAN_PREFERENCE'))
参考 https://www.mssqltips.com/sqlservertip/4939/how-to-force-a-parallel-execution-plan-in-sql-server-2016/
移动临时库tempdb位置
alter database tempdb modify file (name = tempdev ,filename = '/var/opt/mssql/data/' ,size=256)
有几个文件就敲几条命令,然后 重启数据库
tempdb文件数少可能导致闩锁争抢
sqlserver数据库迁移
使用数据迁移助手 Microsoft® Data Migration Assistant v5.0
https://docs.microsoft.com/zh-cn/sql/dma/dma-migrateonpremsql?view=sql-server-ver15
其他
两种方式设置表的hint
在option中设置
SELECT *
FROM [pub].[dbo].[table1]
option(maxdop 1,TABLE HINT( [pub].[wx].[table1], FORCESCAN))
在表名后门通过with设置
SELECT *
FROM [pub].[dbo].[table1] with ( FORCESCAN)
option(maxdop 1)
https://docs.microsoft.com/en-us/sql/t-sql/queries/hints-transact-sql-query?view=sql-server-2017
© 2020, 新之助meow. 原创文章转载请注明: 转载自http://www.xinmeow.com