一个因拼接字符串引起的SQL Server性能问题

在做一个薪资计算Log功能时,我为了得到当前步骤中参与计算的人和薪资项数据,采用了类似以下的写法:

当我在28的ESL数据库上(emphr表中的数据共有28000条)执行这个脚本时,运行时间超过10秒(我没耐心等下去,因为我知道这属于性能问题)

当我把参与拼接的员工数量减小到1000,速度很快。随着人数的增加,消耗时间成指数(大概)增长。当人数是5000人时,消耗6秒,6000人时,消耗14秒。

在网上找到了一个佐证:
GraphOfTimeTaken2
图片来源: http://www.sqlservercentral.com/blogs/philfactor/2009/02/16/be-careful-with-string-concatenations-in-sql-server-with-big-strings/

于是从网上找找如何高效的实现这种拼接。

最终的解决办法参考http://stackoverflow.com/questions/18440469/concatenate-column-values-as-single-value-sql-server-2005

输出为:,A000092112,A000100247,A000100353,A000100

效率为:
ThirdTest

这是利用SQL Server自带的功能,将表数据转换成XML。但我们指定了PATH(”),就意味着生成的XML节点是单纯的文字节点,没有标签包裹。

如果把写成PATH(‘name’)

输出为:<name>,A000092112</name><name>,A000100247</name><name>,A000100353</name><name>,A000100366</name>

参考资料:
Basic Syntax of the FOR XML Clause
Concatenate column values as single value SQL Server 2005
Be Careful with String Concatenations in SQL Server with Big Strings.

Posted in Uncategorized, 编程 | Tagged , , , , | 1 Comment

HHKB键盘布局及指法图

hhkb-layout点击查看大图。

图片修改自:http://elitekeyboards.com/proddata/doc/hhkbp2_basic_layout.png

 

Posted in 数码 | Tagged , , | Leave a comment

SQL Server:请不要在新创建的表中使用NText

有同事遇到SQL Server中NVARCHAR和NTEXT不能比较的问题。查了MSDN,看到以下信息,觉得比较重要,摘抄上来:

 Important
ntext , text, and image data types will be removed in a future version of Microsoft SQL Server. Avoid using these data types in new development work, and plan to modify applications that currently use them. Use nvarchar(max)varchar(max), and varbinary(max) instead.

Fixed and variable-length data types for storing large non-Unicode and Unicode character and binary data. Unicode data uses the UNICODE UCS-2 character set.

也就是说新写的代码需要使用nvarchar(max)代替ntext,因为ntext类型可能会在将来的版本被删掉。

并且制定计划,修改现有代码中ntext为nvarchar(max)。

原文地址:http://technet.microsoft.com/en-us/library/ms187993.aspx

Posted in 编程 | Tagged , , | Leave a comment

SQL Server中的NVARCHAR中的N是什么意思

查了MSDN,解决了心中疑惑。

原来NVARCHAR中的N是National的意思,也就是National VARCHAR。

N’你好’,这里的N也是National的意思,就是说让SQL Server认为这个字符串是NCHAR

VARCHAR的意思是可变长度的CHAR。

CHAR就是一个字符。

来源:

ntext
Variable-length Unicode data with a maximum string length of 2^30 – 1 (1,073,741,823) bytes. Storage size, in bytes, is two times the string length that is entered.
The ISO synonym for ntext is national text.

http://technet.microsoft.com/en-us/library/ms187993.aspx

Posted in 编程 | Tagged , | Leave a comment

转述:Internet Explorer 11:不要叫我IE

我们系统中有个bug是说当用户使用IE 11浏览器访问我们系统时,会有个提示:系统不支持当前浏览器。

查了原因,是因为IE 11改变了以往的User Agent String(简称UA)。

在IE10及以下版本中,UA一般为:

Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)

而到了IE11,则变成了:

Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv 11.0) like Gecko

可以看出新的UA主要变化为:去掉了”MSIE”,增加了”like Gecko”。

而我们原先JS里判断浏览器类型时认为的IE特征字符串就是”MSIE”,而当IE 11去掉了该关键字后,程序判断自然就出错了。

但是随着对IE11了解的深入,发现它不止修改了UA,还删除了我们轻度使用的方法/属性:

  • 修改document.all的表现,document.all返回为false,但document.all仍可以获取到元素(待验证),估计很快就会被删掉。
  • 删除了attachEvent
  • navigator.appName 被写成了 “Netscape”(遵守HTML5规范,IE只能这么做)
  • navigator.product 被写成了 “Gecko” (遵守HTML5规范,IE只能这么做)
  • 删除了window.execScript() – IE’s own version of eval()
  • 删除了window.doScroll() – IE’s way of scrolling the window
  • 删除了script.onreadystatechange – IE’s way of telling of listening for when a script was loaded
  • 删除了script.readyState – IE’s way to test the load state of a script
  • 删除了document.selection – IE’s way of getting currently selected text
  • 删除了document.createStyleSheet – IE’s way to create a style sheet
  • 删除了style.styleSheet – IE’s way to reference a style sheet from a style object

然后建议是:不检测浏览器类型,而改为检测特性(而特性检测应该是jQuery的范围,我们不用特别关心)。

另外一件事情需要开发人员知悉的是:jQuery 2.0及以上版本就不支持IE 6,7,8了。所以现在jQuery有两个分支,一个是1.x一个是2.x。

原文请见:http://www.nczonline.net/blog/2013/07/02/internet-explorer-11-dont-call-me-ie/

更多信息:

理解User Agent String:http://msdn.microsoft.com/en-us/library/ie/ms537503(v=vs.85).aspx

所有已知浏览器的User Agent String:http://www.useragentstring.com/pages/Browserlist/

如何检测特性而不是检测浏览器:http://msdn.microsoft.com/en-us/library/ie/hh273397(v=vs.85).aspx

浏览器与特性检查:http://msdn.microsoft.com/en-us/magazine/hh475813.aspx

IE 11的兼容性:http://msdn.microsoft.com/en-us/library/ie/bg182625(v=vs.85).aspx

Posted in 编程 | Tagged , , | Leave a comment

有效的javaScript变量名

找到个好玩的文章,介绍那些字可以作为Javascript变量名。

比如var ಠ_ಠ = eval;是合法的

var ლ_ಠ益ಠ_ლ = 42; 也是合法的。

还介绍了一个网站可以验证你输入的文字是否可以作为JS的变量名http://mothereff.in/js-variables

原文在:http://mathiasbynens.be/notes/javascript-identifiers

Posted in 编程 | Tagged , , | Leave a comment

Fitbit使用小记

Fitbit Flex

很早就听说Fitbit这个产品,半年前得知其要推出一款手环(Fitbit Flex),就一直在等消息。

Fitbit Flex是一种电子计步器,与其他功能简单的电子计步器(几十块钱的那种)相比,它有以下优点:

  • 精确记步,在车上时几乎不记步。
  • 输入当前身高、体重,可以将步数换算成距离与消耗的卡路里
  • 震动闹钟
  • 睡眠质量监测(仅仅根据睡觉时手动次数来判断)
  • 可以防水10米,游泳、热水淋浴都没问题。只是不知道热水泡澡会不会有问题
  • Windows、Mac、iOS、Android系统均有客户端软件,用于同步Fitbit的数据到Fitbit网站
  • 手动纪录每日饮水量

缺点大概有以下几点:

  • 睡眠监测功能需要自己在睡觉前打开,在起床后关闭,否则不会自动纪录与停止
  • 没心律监测,这个应该是真正睡眠检测的核心
  • 没对中国发售,所以初次激活需要有美国IP才可以
  • 同样的原因,摄入的卡路里没法相对准确的输入。因为输入这个数据是需要选择你吃了什么,而列表中几乎没有中国食品。但有水煮蛋、煎蛋、牛奶等国际通用的食物。
  • 同步时有时会出现怪异情况,假如同步前是1000步,同步中会变成1500步,同步结束后就是1300步,之后再同步就一直是1300了。不知是不是与它内部算法有关,比如会根据一定的算法排除不计入成绩的步数

包装:

不太喜欢这个产品的包装,不环保,拆起来也困难。

包含:

  • Fitbit Flex一个(大号腕带+传感器+不锈钢腕带锁扣)
  • 小号腕带一只
  • USB充电线一根
  • USB蓝牙收发器一只(可能是特制的,没测试过是否与通用蓝牙设备一样)
  • 多种语言些的一句话设置手册,内容就是让你到Fitbit网站下载程序
  • 一张环境影响声明的纸张
  • 唯独没有说明书,必须到官网去看PDF版本的

使用方法:

第一次使用前需要充电并联网激活。我在Windows上拨了VPN,但始终无法激活。后来改成在iPhone上拨VPN,然后就能成功激活了。

iPhone上的Fitbit程序必须在美国市场下载,中国没有。所以你还必须有个美国App Store帐号。

之后就可以把Flex戴在手腕上了,可以在Fitbit网站上对手环进行设置,比如你是戴在习惯用手还是非习惯用手(习惯用手是指一般人的右手)。还可以选择睡眠监测的精确度,共两档,推荐使用默认值。

Flex上有五盏LED灯。平时佩戴时,用手指轻轻敲两下Flex,就会以百分比形式告诉你距离你的目标还有多少。如你设定的目标是每天15000步,那么每盏灯就表示3000步。如果一盏灯常亮,就说明满了3000步,如果闪烁,就说明在那个范围内。比如你在轻敲Fitbit之后,有两盏灯常亮,一盏灯在闪烁,就说明你已经走了至少6000步,但还不到9000步。

如果你走到了目标步数,它还会有LED灯闪烁,并且震动以表示祝贺。

当你晚上准备睡觉的时候,需要快速轻敲4-5下,此时Flex会震动一下,同时有两盏灯在亮,就说明进入了睡眠模式。当你醒来的时候,也是轻敲4-5下,就退出了睡眠模式。

当震动闹钟震动的时候,也是轻敲几下就关闭了闹钟。

一次充电大概需要3小时,正常情况下可以使用5天。

其实我对这个产品还有其他的期望:

  • 可以有液晶屏代替5个LED灯,这样这款腕带同时还是一款电子表
  • 可以支持心律,环境声音分析,做到真正的睡眠监测
  • 电池再耐用些

总体来说这个产品还是很棒的,目前我设定每天15000步,正常情况下每天可以走10000步,如果晚上跑步3km,会达到15000步。

Posted in 数码 | Tagged | Leave a comment

测试密码强度的网站

How Secure Is My Password
http://howsecureismypassword.net/

Strength Test
http://rumkin.com/tools/password/passchk.php

Microsoft Safety And Security Center
https://www.microsoft.com/security/pc-security/password-checker.aspx

How Big Is Your Haystack
https://www.grc.com/haystack.htm

以下几个网站的效果不是很理想,因为abc-123或者123!@#qwe这样的密码,他们也认为是强度很高的密码,有一定的误导性。

The Password Meter
http://www.passwordmeter.com/

Test Your Password
http://www.testyourpassword.com/

Yet Another Password Meter
http://www.yetanotherpasswordmeter.com/

Posted in 软件 | Tagged , , | Leave a comment

SVN培训大纲

这份大纲是我在公司做SVN培训时用到的,感觉可能对其他人有用,就贴了出来。

  • 日常操作
    • 地址:
    • 迁出
    • 提交:顺利提交、提交失败,提示先更新
    • 提交日志:日志内容、与Issue Tracker绑定
    • 更新
    • 查看历史
    • 比较:与工作目录比较、与之前某版本比较
    • 添加文件及文件夹:直接添加、提交时添加
    • 解决冲突:推荐推迟解决
    • 创建分支:方法、什么时候创建分支
    • 查看分支历史:正常查看,stop-on-copy
    • 合并分支:方法、什么时候合并分支
    • 创建tag:方法、什么时候创建tag
    • 更新到特定版本:更新、更新后如果想提交该怎么办(直接提交、提交到分支)
  • 高级操作
    • Cleanup:什么时候会用到cleanup
    • 忽略文件及文件夹
    • Global-ignore
    • 切换分支:如何、安全吗
    • 重定向仓库位置:如何、跟切换分支的区别
  • SVN管理
    • 创建SVN仓库:VisualSVN的操作,TortoiseSVN的操作
    • 备份与恢复:只有命令行操作
Posted in 编程 | Tagged | Leave a comment

In BCP command, database name and table name must begin with letter or underscore, and can’t contains hyphen.

One of our database name is “0726″, and another database is “demo07-26″.
We use the following command to import data:
bcp 0726..abc in f:\io.txt -S. -Usa -Pmypass -c -F1
bcp demo07-26..abc in f:\io.txt -S. -Usa -Pmypass -c -F1
Both command will shows an error message:
An error occurred while processing the command line.
Database name or table name begin with number is not a good habit, if you insist to do this, you may use [] to surround your database name.
bcp [0726..abc] in f:\io.txt -S. -Usa -Pmypass -c -F1
bcp [demo07-26..abc] in f:\io.txt -S. -Usa -Pmypass -c -F1
That will works.
Posted in 编程 | Tagged , , , , | Leave a comment