SqlServer使用笔记

本文提供了SqlServer的优化策略,如索引使用、SQL查询优化、系统监控及数据库管理技巧,包括端口修改、磁盘空间解决方案等,适用于数据库管理员和技术人员。

SqlServer

一、复杂sql

1.1 行转列,多行合并一个字符串

-- 基础数据
SELECT * FROM DailyVisit
  where Date in('2024-10-01','2024-10-02','2024-10-03') order by date
-- 行转列
select * FROM DailyVisit
  pivot(max(info) for Date in([2024-10-01],[2024-10-02],[2024-10-03])) as tmp
-- 某个字段多行合并成一个字符串(stuff:替换函数,for xml path:多行转xml字符串)
select stuff(
  (select ','+convert(nvarchar(50),Date,23)--常见三种:120 23 24
	  from DailyVisit
	  where Date in('2024-10-01','2024-10-02','2024-10-03')
	  for xml path('')
  ),1,1,'')

结果如下:

1.2 分页查询

SELECT 1,[Type]
    ,[Date]
    ,[Info]
    ,[IsDeleted] FROM DailyVisit
ORDER BY 1 OFFSET 0 ROWS FETCH NEXT 5 ROWS ONLY
-- order by可指定字段名来排序;
-- order by 1是指用第1列排序的意思,配合select 1 用常数做第1列,可以不打乱默认排序实现分页查询。

二、SQL使用笔记

1、(sql server 2012后)跳过n条记录取m条记录: order by …… OFFSET n ROWS FETCH NEXT m ROWS ONLY

三、查看系统

1、查看监听端口:exec sys.sp_readerrorlog 0, 1, 'listening'

2、查看服务名、计算机名:

SELECT @@SERVERNAME as '服务名',SERVERPROPERTY('SERVERNAME') as '计算机名'

3、查看索引大小:

SELECT i.name AS IndexName, SUM(s.used_page_count) * 8 AS IndexSizeKB
FROM sys.dm_db_partition_stats  AS s 
JOIN sys.indexes                AS i
ON s.[object_id] = i.[object_id] AND s.index_id = i.index_id
WHERE i.name = '索引名称'
GROUP BY i.name ORDER BY i.name

4、添加(非聚集/聚集)主键

alter table TableName add primary key clustered--主键且聚集 nonclustered 主键但非聚集
(
   columnName ASC
)

四、其他知识

1、【假设当前主机名:host-1,数据库实例名:testSql,端口为:1234】安装SqlServer后,如果要把端口修改为1433,去SqlServer配置管理器把对应实例的TCP/IP监听端口的TCP PORT都改成1433,然后重启SqlServer服务。重启完成后,数据库连接串也从【host-1\testSql,1234】变成【host-1\testSql,1433】。

2、数据库撑爆磁盘解决方案:

  • a.右击数据库→任务→收缩,然后收缩文件和数据库,包括对应日志(SqlServer数据库扩充后不会自动释放空余的空间)。
  • b.不需要做数据库增量备份(不需要开启CDC)的数据库,右击属性→选项→恢复模式→改成简单,再用a的方式收缩一次日志文件。
  • c.右击数据库,选择属性→文件,添加其他磁盘作为备用存储。
  • d.分离数据库文件,将文件移动到比较大的磁盘分区,再把文件重新关联数据库。

3、一千万条数据,建立索引时间约为4秒,索引占用空间大小约为200M。(索引字段大小为10)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值