1.建表,因为程序用Entity Framework 的缘故,每一张映射表需要一个主键,当初为了偷懒,建表用了一个多余的自增涨ID作为主键,这个主键几乎和业务逻辑没有关系,又白白占用一个聚合索引,真的让人头大。(这里可以让这个字段作为主键,但是一定要取消他聚合索引,因为后期数据多了,需要查询某一天的数据,发现时间类型建非聚集索引,查询很多列依然会很慢。尽量把这个聚集索引给where 条件最频繁的那个)
2.高版本数据库SQLServer 和MySQL 都能直接计算MD5加密,省去了很多事情,起码不需要用程序来算MD5给人家导数据了(但是值得注意的是-> SQLServer 需要将加密字段的数据先转换为varchar类型,nvarchar类型因为是双字节的缘故被加密会出现偏差得到错误的结果)
3.SQLServer 中int类型作为where的查询条件检索速度最快(起码比日期和字符串的快),如果数据多,先给这个int类型的字段加个索引
4.如果日期类型的字段作为查询条件,且这个字段有索引,那么尽量这么查询(日期字段为字符串进类型不可以行大小比较,因为不准,所以先要把字段转化为日期类型再进行比较)
--速度快的查询如下,这样该日期类型的日期字段还能用上索引
select 字段1,字段2
FROM 表1
where 日期字段 >= '20181029'
and 日期字段 < '20181030'
--速度慢的查询如下
select 字段1,字段2
FROM 表1
where convert(varchar(10),日期字段,23)='2018-10-29'
5.查询的字段和where条件都决定了查询的速度。
where条件如果只有聚合索引的字段,那查询的字段随意
where条件如果是费聚合索引的字段,那么查询的字段尽量少
6.查询数据不行就整临时表,存在tempdb,表名最好写上什么时间可以删除,等到时候方便删除。