易截截图软件、单文件、免安装、纯绿色、仅160KB
热门标签: c c# c++ asp asp.net linux php jsp java vb Python Ruby mysql sql access Sqlite sqlserver delphi javascript Oracle ajax wap mssql html css flash flex dreamweaver xml
 最新文章 : sql

SQL Server全文索引的个人总结(上) 关于中文分词


SQL Server全文索引的个人总结(上) -关于中文分词
(2005-11-14 04:29:44)
转载
 
分类:深度研究
大家都知道LIKE查询很慢,全文索引就是事先做好相关的索引,表示哪个主题词可以在哪些记录里找到,甚至事先计算好RANK,检索时可以把相关度高的先列出来,这可以大大提高检索的速度。
打个比方,你有很多的小抽屉,每个抽屉里面放一些杂物,假如你要找东西,最原始的方法就是一个个抽屉翻,这就是没有索引的情况。
假如聪明一点,给抽屉编号(唯一键),把哪个号码的抽屉有什么东西记录在纸上,找东西先看看这张纸,这就是普通索引,假如你要知道哪个抽屉有什么,你可以在纸上迅速找到抽屉号码(大家知道这是使用查找树),然后得到相关的信息,这种情况普通索引是很快的;但是要找到一个特定的东西哪些抽屉有,你就要把整张纸遍历一次,这就是LIKE查询,假如你要找哪些抽屉同时有2种甚至更多种物品,LIKE就更加繁琐了。假如一个表有上千万的纪录,大家可以想象查询的代价。
可以换一个思路,另外找张纸,记录一样东西存在于哪些抽屉:
夹子:1,3,4,5,6,9,12...
钱币:2,3,4,7,12...
药丸:1,3,5,6...
这样找到某样东西或者某几样东西都很容易。
全文索 ......

SQL Server全文索引的个人总结(下) 关于中文分词


SQL Server全文索引的个人总结(下)-关于中文分词
(2005-11-14 04:32:01)
转载
 
分类:深度研究
在使用SQL Search的过程中,还发现了一个问题:它对中文,是按字分词的,下面我解释一下:
比如对'博客堂成员很多是MVP'这句话,假如一个个的字的作索引,会比使用'博客堂','成员',MVP'几个词作索引生成的索引大很多,这样不仅浪费空间,也影响索引的效率和准确度。假如英文是按照字母而不是单词作索引,估计世界上如今就没有全文索引,也没有google了。
但是中文在分词上,相比英文有天然的屏障,英文的单词之间有间隔,但是中文不是,必须使用计算机的人工智能把句子分成一个个的词,有些时候,根据句子本身还不够,还必须根据上下文,或者一些日常知识才能判断。比如 乒乓球拍/卖/完了 和 乒乓球/拍卖/完了 ,电脑咋能知道是哪个意思并正确分词呢!
根据使用的结果,SQL Search对中文使用的应该是按字分词(可能是因为原来是英文引擎的缘故),比方说你要查'马克',它会把'马克思'也给你倒腾出来。
我的一个123M的数据库,全文索引有55M,每次全文查询都比较慢(当然机器也很次)。
-------------------------------------------------------------------- ......

Sql Server中使用newid()随机函数取出数据

这种用法相信在网站中经常使用,如要在表中随机取出10条记录,如果使用编程语言进行运算的话会很麻烦而且效率低下。在Sql Server中自带了random()函数用于生成随机数,其实它还自带了另外一个随机函数newid();newid()在扫描每条记录时都会生成一个随机的值:
执行select newid();运行结果
可以看到这并不是一个随机的数字类型。
在表中随机取出n条记录,就可以使用select top n * from table order by newid()实现;
 
......

SQL中case when then的使用实例

假设现在News表有以下字段
News_Id,News_Title,News_IsSetTop,News_SetTopTime
其中News_IsSetTop(char(1))是“是否置顶”的含义;News_SetTopTime(DateTime)是置顶时间;
现在要实现:如果News_IsSetTop为"1"时 ,ORDER BY News_IsSetTop DESC,News_Id DESC;News_IsSetTop为"0"时,ORDER BY News_ID DESC
经过反复的试验,终于解决了这个问题:
select
 news_id,news_issettop,news_settoptime
 from
 hope_T_news
order by
 (case when news_issettop=’0′ then news_issettop
 when news_issettop=’1′ and news_settoptime>getdate() and news_settoptime<dateadd(day,3,getdate()) then news_id
 end)
 desc,news_id desc
 
......

sql server中将自增长列归零

一个项目完成后数据库中会有很多无用的测试数据,可以使用delete * 将数据全部删除,但自增长列(一般是主键)基数不会归零,使用TRUNCATE函数可以将表中数据全部删除,并且将自增长列基数归零。一定要注意,表中的数据全部删除了。它的语法如下:
TRUNCATE TABLE tableName –其中tableName中所要操作的数据
......

最简单的最高效的过滤SQL脚本防注入

.errInfo
{
    border:solid 1px #d00;
    background:#F7F0F7;
}
1.URL地址防注入:
//过滤URL非法SQL字符
var sUrl=location.search.toLowerCase();
var sQuery=sUrl.substring(sUrl.indexOf("=")+1);
re=/select|update|delete|truncate|join|union|exec|insert|drop|count|’|"|=|;|>|<|%/i;
if(re.test(sQuery))
{
    alert("请勿输入非法字符");
    location.href=sUrl.replace(sQuery,"");
}
 
2.输入文本框防注入:
引入以下js
//防止SQL注入
function AntiSqlValid(oField )
{
    re= /select|update|delete|exec|count|’|"|=|;|>|<|%/i;
    if ( re.test(oField.value) )
    {
    //alert("请您不要在参数中输入特殊字符和SQL关键字!"); //注意中文乱码
    oField.value = ”;
    oField.className="errInfo";
    oField.focus();
    return false;
    }
 
......
总记录数:4346; 总页数:725; 每页6 条; 首页 上一页 [1] [2] [3] [4] 5 [6] [7] [8] [9] [10]  下一页 尾页
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号