美文网首页
【20002】Sql Server 常用语法、常用语句

【20002】Sql Server 常用语法、常用语句

作者: 终极蚂蚁 | 来源:发表于2020-04-16 18:45 被阅读0次

性能检测语句

-- 1.查询sql所消耗io性能
set statistics time on 
-- 2.查看SQL语句时间消耗
set statistics profile on 
-- 3.查看SQL语句索引消耗
set statistics io on
-- 执行语句
    select password from userTest group by password order by password
-- 关闭检测
set statistics io off
set statistics profile off
set statistics time off

临时表

临时表在SysObjects表里是找不到的

  • 本地临时表

    创建临时表和创建普通表一样,只需要给名称前加一个#即可

CREATE TABLE #temp (
    [id] int NOT NULL IDENTITY(1,1) ,
    [name] varchar(255) NULL ,
    [createTime] datetime2 NULL DEFAULT getdate() ,
    PRIMARY KEY ([id])
    )
  • 可见性

    一个临时表的作用时效是一个事务

  • 全局临时表

    创建时在名称前加一个##即可

CREATE TABLE ##temp (
    [id] int NOT NULL IDENTITY(1,1) ,
    [name] varchar(255) NULL ,
    [createTime] datetime2 NULL DEFAULT getdate() ,
    PRIMARY KEY ([id])
    )
  • 可见性

    • A事务创建##temp后,B事务是可以查到##temp

    • A事务创建##temp后,关闭A事务,B事务查不到##temp

    • A事务创建##temp后,B事务加锁查询##temp后持续未提交,关闭A事务,C事务还可以查询到##temp

    • A事务创建##temp后,B事务加锁查询##temp后持续未提交,提交A事务,C事务还可以查询到##temp,关闭B事务后,C事务就不能查询到了

begin tran
select * from ##temp with(xlock)
waitfor delay '1:0:0'
commit tran
  • 一般操作
-- 查询数据并写入临时表:
select * into #tab from table;
-- 删除临时表:
drop table #tab;

tran | waitfor delay

  • begin tran开启事务
  • commit tran 提交事务
  • waitfor delay 延迟 后面跟'0:1:30'表示延迟1分30秒

示例

---开启事务
begin tran
-- select * from userLogin
waitfor  delay '0:1:30' --等待5秒执行下面的语句
update userLogin set name = 'text' where id = 12
commit tran

系统表sql

  • 获取表名称
-- 获取表名称
select top 10000
name 表名称,create_date 创建时间,modify_date 最后修改时间
from sys.tables  order by create_date desc
  • 查询哪些sql的逻辑读很高,之后进行优化
--查询哪些sql的逻辑读很高,之后进行优化
SELECT
    s2.dbid,
    s1.sql_handle,
  (SELECT TOP 1 SUBSTRING ( s2. TEXT, statement_start_offset / 2 + 1,   (( CASE WHEN statement_end_offset = - 1  THEN ( LEN( CONVERT (nvarchar(MAX), s2. TEXT)) * 2 )   ELSE statement_end_offset END ) - statement_start_offset ) / 2 + 1 )    ) AS sql_statement,
    execution_count,
    plan_generation_num,
    last_execution_time,
    total_worker_time,
    last_worker_time,
    min_worker_time,
    max_worker_time,
    total_physical_reads,
    last_physical_reads,
    min_physical_reads,
    max_physical_reads,
    total_logical_writes,
    last_logical_writes,
    min_logical_writes,
    max_logical_writes 
FROM
    sys.dm_exec_query_stats AS s1  CROSS APPLY sys.dm_exec_sql_text (sql_handle) AS s2 
WHERE
    s2.objectid IS null 
ORDER BY
    last_worker_time DESC,
    s1.sql_handle,
    s1.statement_start_offset,
    s1.statement_end_offset ;
  • 查看索引使用率(很慢)
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT
DB_NAME() AS DatbaseName
, SCHEMA_NAME(o.Schema_ID) AS SchemaName
, OBJECT_NAME(s.[object_id]) AS TableName
, i.name AS IndexName
, ROUND(s.avg_fragmentation_in_percent,2) AS [Fragmentation %]
INTO #TempFragmentation
FROM sys.dm_db_index_physical_stats(db_id(),null, null, null, null) s
INNER JOIN sys.indexes i ON s.[object_id] = i.[object_id]
AND s.index_id = i.index_id
INNER JOIN sys.objects o ON i.object_id = O.object_id
WHERE 1=2
EXEC sp_MSForEachDB 'USE [?];
INSERT INTO #TempFragmentation
SELECT TOP 20
DB_NAME() AS DatbaseName
, SCHEMA_NAME(o.Schema_ID) AS SchemaName
, OBJECT_NAME(s.[object_id]) AS TableName
, i.name AS IndexName
, ROUND(s.avg_fragmentation_in_percent,2) AS [Fragmentation %]
FROM sys.dm_db_index_physical_stats(db_id(),null, null, null, null) s
INNER JOIN sys.indexes i ON s.[object_id] = i.[object_id]
AND s.index_id = i.index_id
INNER JOIN sys.objects o ON i.object_id = O.object_id
WHERE s.database_id = DB_ID()
AND i.name IS NOT NULL
AND OBJECTPROPERTY(s.[object_id], ''IsMsShipped'') = 0
ORDER BY [Fragmentation %] DESC'
SELECT top 20 * FROM #TempFragmentation ORDER BY [Fragmentation %] DESC
DROP TABLE #TempFragmentation

参考链接
SQL Server索引的维护 - 索引碎片、填充因子

相关文章

  • 【20002】Sql Server 常用语法、常用语句

    性能检测语句 临时表 临时表在SysObjects表里是找不到的 本地临时表创建临时表和创建普通表一样,只需要给名...

  • SQL 注入的注释方法

    常用的数据库有 Microsoft SQL Server 和 MySQL。 SQL 语句注释方法有/* */ 和-...

  • SQL语句整理——基础篇

    SQL语句用来操纵数据库的常用通用语言,主要用于oracle,sql server,mysql,access,ex...

  • 【搬运】Sql Server中截取字符串的常用方法

    Sql Server中截取字符串的常用方法 1、LEFT() 从左边截 语法:LEFT(character,int...

  • sql1

    sql常用语句: 1、显示时间(在sql当中执行操作系统的命令): 2、在sql中调用linux系统文件语法: 3...

  • MySQL语法模板

    本系列文章主要归纳MySQL的SQL语句和常用的函数。 SQL语句:主要分为常用的,show,表、索引,视图,函数...

  • MySQl 常见面试题

    一、SQL语句 问题、SQL语句有哪些类型,每种类型有哪些常用关键字? DDL:数据定义语句。常用关键字有crea...

  • mysql常用SQL语句集锦

    非常有用!常用SQL语句集锦

  • SQL Server 常用高级语法笔记

    自从用了EF后很少写sql和存储过程了,今天需要写个比较复杂的报告,翻出了之前的笔记做参考,感觉这个笔记还是很有用...

  • 常用sql注入语句

    转载链接 渗透常用SQL注入语句大全(网上收集) 记一次通过fckeditor入侵提权拿服务器 常用sql注入语句

网友评论

      本文标题:【20002】Sql Server 常用语法、常用语句

      本文链接:https://www.haomeiwen.com/subject/slkdvhtx.html