.net 杂项

vs 打印信息到输出窗口 :

System.Diagnostics.Debug.WriteLine("打印信息到输出窗口,但是只能在Debug版本运行,到了release版本中,Debug类的函数都会被忽略");
System.Diagnostics.Trace.WriteLine("打印信息到输出窗口,可以同时在Debug和release版本运行");

  

 

1、在mvc或者api中 ,从一个控制器调用另外一个控制器,可以使用   new V2Controller() { ActionContext = this.ActionContext }.Get(id)    实例化调用,这样能把上下文信息传递给Get 否则,在get中无法使用过滤器,无法使用上下文的部分对象

 2、sql 2014 两千万数据的表 新建索引语句:

CREATE  NONCLUSTERED INDEX index_name ON    [log] (logdate desc)
WITH (STATISTICS_NORECOMPUTE =OFF,fillfactor=60)

  填充因子设置为60 索引名称为  index_name   表明:[log]   字段名:logdate    STATISTICS_NORECOMPUTE 非聚集索引

2.1 手动更新、删除执行sql语句,必须用事务

begin   tran  
delete         [log]  where  id=    4332869        

执行看影响行数
  rollback   tran     进行回滚
  commit tran     进行提交

 2.2 output 的用法

DELETE FROM TestTB OUTPUT deleted.* INTO @tempTable WHERE id > 4
--删除并将删除的数据保存到另外一张表中

在insert ,update ,delete 中均可以使用output关键词

 

3、sql server 中的计算列和修改计算列为持久化

create table orders
(
orderid int not null,
price money not null,
quantity int not null,
orderdate datetime not null,
total as price*quantity ,
total2 as Price * quantity persisted,
shipedate as dateadd (day,7,orderdate)
)

  ALTER TABLE dbo.log alter  column  logdate  add PERSISTED     /*修改 logdate 计算列为持久化。 关键词:persisted */

 4、update 语句的联合表查询

  update  a  set   IsClash=1    from   a  left join  [b]  on  a.Mobile=[b].Mobile and  [b].PlaceNo=2018112901
  where   a.PlaceNo=2018112901 and    [b].Id      is   not  null
 update       UserTable     set     b+=b,c=#cz.c     from    #cz ,UserTable  where  UserTable.a=4  and   UserTable.b=1  and  #cz.userid=UserTable.UserID

 

 

包含索引
快照复制
有序GUID

数据库优化,
首先是分区,分表,分库
其次是读写分离
然后是分布式
接着采用分发订阅模式
最后是优化应用架构
如果io是瓶颈,可以采用高性能的SSD固态存储
文件用文件服务器 或者做文件同步
有存储服务器,划分好磁盘可以映射到每一台服务器上,比如每一台服务器上都映射为F盘,那他的路径是一样的
其实你准备一个文件服务器,那个文件地址指向那台文件服务器也可
现在比较流行oss 存储对象

 

3. dtime,就不要使用datetime类型了,呵呵,用int就行。
dtime = DateTime.Now - 2000年1月1日0分0秒,取总秒数。
4. 表中的varchar类型(MgrObjId, Id, Value),考虑是不是可以改成int。 MgrObjId,可以放到用另外一张表:MgrObjId,与这个int关联。 我们想一下,这些varchar是不断重复的,我们可以在另外张表插入10w个监控指标与本表的MgrObjId_int字段关联。 这个表,我们在系统一启动就加载到内存中:Dictionary<string,int>_dic. //key:MgrObjId. 这样,我们就不会有数据库访问消耗。
Id(guid)也是雷同。 value,用long也应该可以吧, 对于模拟量、数字量、信号量都可以处理。比如存浮点,我们自定义浮动系数,与long相乘,即可得float。
因为这个表是主表,存储量大,所以设计时一定要慎重,每个字段都要考虑合理性。即使一定要用字符串,也一般用char,而不用varchar。

默认情况下SET STATISTCS IO是停用的,我们可以通过下列语句在当前会话级别打开。
SET STATISTICS IO ON
这个语句可以帮助我们获得在语句执行时,所发生IO数(页读/写)

USE StatisticsDB
GO
SELECT * INTO SalesOrderDetail FROM AdventureWorks2008R2.Sales.SalesOrderDetail 
GO
SET STATISTICS IO ON
DBCC dropcleanbuffers
DBCC freeproccache
GO
SELECT * FROM SalesOrderDetail 
GO
SELECT * FROM SalesOrderDetail

 

 

从文件批量插入数据到 数据库
USE kfglxt
BULK INSERT dbo.test_Street
FROM 'f:\test.txt'
WITH (
FIELDTERMINATOR = '\t',
ROWTERMINATOR = '\n'
);


统计表数据量
SELECT OBJECT_NAME(ii.id) TableName , rows
FROM sysindexes ii
INNER JOIN sysobjects oo
ON ( oo.id = ii.id
AND oo.xtype = 'U ')
WHERE ii.indid < 2
ORDER BY TableName;

统计数据库大小(也能统计到记录数)
exec sp_spaceused 'dbo.log'
https://blog.csdn.net/u010070255/article/details/77852556


关闭数据的日志模式
如何让SQLServer执行SQL时不写日志
禁掉ldf文件
1。对表进行TRUNCATE TABLE 操作
2。在Simple Recvery Mode下的 SELECT INTO, BCP (Bulk Insert/Bulk Update), CREATE INDEX 以及对于Text/Image数据类型 等的操作。
3。如果使用Full Recovery Mode,所有的操作都将会被记录(还包括数据库备份等)
我觉得在使用大量的删除插入语句的时候如果不想让DB记录log,应该可以在执行语句前执行下列语句将日志记录方式改为simple
ALTER DATABASE [CSMCISA] SET RECOVERY simple
GO
然后在执行完成后再将数据库的日志记录方式改过来就行了,如果不放心就写再事务中,确保日志记录方式不会因为我们的操作而改变.
ALTER DATABASE [CSMCISA] SET RECOVERY full/bulk_logged

 

 

cte递归

表结构

id node pid

with cte as 
(
select * from 表名 where pid=union all
select  a.* from 表名 as a,cte as b where a.pid=b.id
)
select * from cte

OPTION(MAXRECURSION 2)   --限制递归层次

 

 

 

递归查询没有显式的递归终止条件,只有当递归子查询返回空结果集(没有数据行返回)或是超出了递归次数的最大限制时,才停止递归。

默认的递归查询次数是100,可以使用查询提示(hint):MAXRECURSION 控制递归的最大次数:OPTION( MAXRECURSION 16);如果允许无限制的递归次数,使用查询提示:option(maxrecursion 0);当递归查询达到指定或默认的 MAXRECURSION 数量限制时,SQL Server将结束查询并返回错误,如下:The statement terminated. The maximum recursion 10 has been exhausted before statement completion.事务执行失败,该事务包含的所有操作都被回滚。在产品环境中,慎用maxrecursion 查询提示,推荐通过 where 条件限制递归的次数。

 

查看 mssql 数据库的连接数

查看链接数
select * from master.dbo.sysprocesses
where dbid = DB_ID('adlog')

查看最大连接数,可以在属性中修改
SELECT @@MAX_CONNECTIONS

 

对数据进行排序,等级

使用 rank() over   函数进行,具体参考 https://www.cnblogs.com/zhengzeze/p/5583762.html

posted @ 2018-08-03 13:58  Myisqq  阅读(200)  评论(0编辑  收藏  举报