如果您想了解淡sqlserver对like'%关键词%'处理时的索引利用问题的相关知识,那么本文是一篇不可错过的文章,我们将对sql关键字like进行全面详尽的解释,并且为您提供关于C#和SqlSer
如果您想了解淡sqlserver对like '%关键词%' 处理时的索引利用问题的相关知识,那么本文是一篇不可错过的文章,我们将对sql关键字like进行全面详尽的解释,并且为您提供关于C#和SqlServer中处理时间格式问题、Microsoft SQL Server Like关键字、MS SQLSERVER使用问题总结、SQL Server索引-LIKE查询有任何改进吗?的有价值的信息。
本文目录一览:- 淡sqlserver对like '%关键词%' 处理时的索引利用问题(sql关键字like)
- C#和SqlServer中处理时间格式问题
- Microsoft SQL Server Like关键字
- MS SQLSERVER使用问题总结
- SQL Server索引-LIKE查询有任何改进吗?
淡sqlserver对like '%关键词%' 处理时的索引利用问题(sql关键字like)
说法一:百分号%通配符前置会让SQL查询不走索引,改走全表扫描。这种说法很流行
结论是错误的
事实上这种说法不太准确 通配符%前置会让sql查找索引时效率极速下降,但在大多数情况下还是会走索引(不需要全文索引,只要建一个普通的索引就可以了)
CREATE NONCLUSTERED INDEX [Ix_索引名] ON [dbo].[wkf_表名]
(
[db_title] ASC
)
此时执行
SELECT top 10 [db_id],[db_Summary],[db_AddDate],[db_title] FROM [库名].[dbo].[wkf_database] where [db_title]like ''%dba%'' order by 1 desc
查询计划显示得很清楚
对比加索引之前:
说一个例外,复杂查询查询优化器可能会抛弃索引改走全表扫描。这不仅是LIKE ''%关键词%'' 时会这样,跟查询复杂度有关
说法二:百分号%通配符前置会让SQL查询走索引不如不走索引
这种说法非常片面,走索引比不走索引99%的情况下都会减少IO从而提高效率,但是:索引查找完的键匹配动作也是有一部分性能消耗的。像上面两张图所示,如果关键字很容易就匹配到了,全表扫描很快就找齐了数据,而索引扫描节省的时间不足以弥补键匹配动作所消耗时间的时候这种情况就发生了(大部分线上查询不存在这问题)这时候优化就变得诡异了。
处理方法:
1.不去管它,多出来的性能消耗不是很大。而且不同的关键词有不同的消耗,只是部分关键词存在此问题,可以忽略
2.更好的方法,如果条件允许建覆盖索引(又叫INCLUDE索引)。前题条件:a存储空间充足,b不显著影响DML操作,c覆盖的索引中没有大字段
CREATE NONCLUSTERED INDEX [Ix_索引名] ON [dbo].[wkf_表名]
(
[db_title] ASC
)
INCLUDE ( [db_id],[db_AddDate])
此时执行查询计划如下,清爽多了吧
以上就是我现在能想到的sqlSERVER处理SELECT * FROM TABLENAME LIKE ''%关键词%''
总结:
1.使用模糊查询最好使用后置,前置会大大降低效率。
select * from T_OMS_EMPLOYEE_BASEINFOR where usernameCn like ''%肖%''
2.使用全文检索,效率远远大于like,不过具体全文检索怎么操作我还没有学习,这边就不能给我例子。 (待学习)
C#和SqlServer中处理时间格式问题
1.C#中的时间格式////获取星期··············································public static string dt; public static string week; protected void Button1_Click(object sender,EventArgs e) { //获取当前日期是星期几 dt = DateTime.Today.DayOfWeek.ToString(); //根据取得的星期英文单词返回汉字 switch (dt) { case "Monday": week ="星期一"; break ; case "Tuesday": week = "星期二"; break; case "Wednesday": week = "星期三"; break; case "Thursday": week = "星期四"; break; case "Friday": week = "星期五"; break; case "Saturday": week = "星期六"; break; case "Sunday": week = "星期日"; break; } //利用TextBox文本框显示当前日为星期几 TextBox1.Text = week; }//获取日期.....................................string strTime = DateTime.Now.ToString("yyyy年MM月dd日");this.Label1.Text = strTime;//获取时间。。。。。。。。。。。。。。。string strTime =DateTime.Now.ToShortTimeString().ToString();this.Label1.Text = strTime;以下更加详细 ---转//获取时间DateTime.Now.ToLongTimeString().ToString(); // 20:16:16DateTime.Now.ToShortTimeString().ToString(); // 20:16DateTime.Now.ToString("hh:mm:ss"); // 08:05:57DateTime.Now.TimeOfDay.ToString(); // 20:33:50.7187500//其他DateTime.ToFileTime().ToString(); // 128650040212500000DateTime.Now.ToFileTimeUtc().ToString(); // 128650040772968750DateTime.Now.ToOADate().ToString(); // 39695.8461709606DateTime.Now.ToUniversalTime().ToString(); // 2008-9-4 12:19:14DateTime.Now.Year.ToString(); 获取年份 // 2008DateTime.Now.Month.ToString(); 获取月份 // 9DateTime.Now.DayOfWeek.ToString(); 获取星期 // ThursdayDateTime.Now.DayOfYear.ToString(); 获取第几天 // 248DateTime.Now.Hour.ToString(); 获取小时 // 20DateTime.Now.Minute.ToString(); 获取分钟 // 31DateTime.Now.Second.ToString(); 获取秒数 // 45//n为一个数,可以数整数,也可以事小数dt.AddYears(n).ToString(); //时间加n年dt.AddDays(n).ToString(); //加n天dt.AddHours(n).ToString(); //加n小时dt.AddMonths(n).ToString(); //加n个月dt.AddSeconds(n).ToString(); //加n秒dt.AddMinutes(n).ToString(); //加n分 DateTime.Now.ToShortDateString().Replace("-","") + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString() + DateTime.Now.Millisecond.ToString(); //200912281737190 这样能确保唯一性 可用作id //获取日期+时间 DateTime.Now.ToString(); // 2008-9-4 20:02:10 DateTime.Now.ToLocalTime().ToString(); // 2008-9-4 20:12:12 //获取日期 DateTime.Now.ToLongDateString().ToString(); // 2008年9月4日 DateTime.Now.ToShortDateString().ToString(); // 2008-9-4 DateTime.Now.ToString("yyyy-MM-dd"); // 2008-09-04 DateTime.Now.Date.ToString(); // 2008-9-4 0:00:0000:00:00而在ASP.NET上最常用的只是2003-12-31号一部分而已你可以使用 DateTime.Now.ToString("d")或DateTime.Now.ToShortDateString(); 不过具体格式是2003/12/31还是2003-12-31的话要看你的系统配置日期配置是哪一种. 你要想确定取得2003-12-31指定的话使用.Tostring()用户自定义格式 格式的字符可以看上面说到的文档. 例如:.ToString("yyyy-MM-dd")返回2003-11-25 .ToString("yyyyMMdd")返回20031125 DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") 返回2010-11-01 11:46:12[转自SDK中的文档] d 将日显示为不带前导零的数字(如 1)。如果这是用户定义的数字格式中的唯一字符,请使用%d。 dd 将日显示为带前导零的数字(如 01)。 ddd 将日显示为缩写形式(例如 Sun)。 dddd 将日显示为全名(例如 Sunday)。M 将月份显示为不带前导零的数字(如一月表示为 1)。如果这是用户定义的数字格式中的唯一 字符,请使用 %M。 MM 将月份显示为带前导零的数字(例如 01/12/01)。 MMM 将月份显示为缩写形式(例如 Jan)。 MMMM 将月份显示为完整月份名(例如 January)。 gg 显示时代/纪元字符串(例如 A.D.) h 使用12 小时制将小时显示为不带前导零的数字(例如 1:15:15 PM)。如果这是用户定义的数字格式中的唯一字符,请使用 %h。 将小时显示为带前导零的数字(例如 01:15:15 PM)。 H 使用 24 小时制将小时显示为不带前导零的数字(例如 1:15:15)。如果这是用户定义的数字 格式中的唯一字符,请使用 %H。 将小时显示为带前导零的数字(例如 01:15:15)。 m 将分钟显示为不带前导零的数字(例如 12:1:15)。如果这是用户定义的数字格式中的唯一字符,请使用 %m。 mm 将分钟显示为带前导零的数字(例如 12:01:15)。 s 将秒显示为不带前导零的数字(例如 12:15:5)。如果这是用户定义的数字格式中的唯一字符,请使用 %s。 ss 将秒显示为带前导零的数字(例如 12:15:05)。 F 显示秒的小数部分。例如,ff 将精确显示到百分之一秒,而 ffff 将精确显示到万分之一秒。 用户定义格式中最多可使用七个 f 符号。如果这是用户定义的数字格式中的唯一字符,请使用 %f。 T 使用 12 小时制,并对中午之前的任一小时显示大写的 A,对中午到 11:59 P.M 之间的任一小 时显示大写的 P。如果这是用户定义的数字格式中的唯一字符,请使用 %t。 tt 使用 12 小时制,并对中午之前任一小时显示大写的 AM;对中午到 11:59 P.M 之间的任一小 时显示大写的 PM。y 将年份 (0-9) 显示为不带前导零的数字。如果这是用户定义的数字格式中的唯一字符,请使用%y。 yy 以带前导零的两位数字格式显示年份(如果适用)。 yyy 以四位数字格式显示年份。 yyyy 以四位数字格式显示年份。 z 显示不带前导零的时区偏移量(如 -8)。如果这是用户定义的数字格式中的唯一字符,请使用%z。 zz 显示带前导零的时区偏移量(例如 -08) zzz 显示完整的时区偏移量(例如 -08:00) 同样对时间也可以进行这样的格式化..你可以使用自定义格式来设置你想要的格式输出. 你可以使用上表中各字符进行任意的组合不管前后次序多少如你写入yyyy-yyyy也是可以的..不过我想没 有多少无聊的人会这么做.的以是相当自由的 注意的是:进行格式化的一定要是日期DateTime格式..在sql中的类型也一样.否则格式无效或出错.特别 是在DataGrid常{0:IFromat}的格式中会用到 2)日期的输入我们在办理入日期格式式常用DateTime.Pares() 但是这个形式的转换是相当有限的,有些C#是会不懂你写入的日期格式的如20031231大家都明白是2003- 12-31号可以C#不认识他.我们可以这样子进行如下 //设置语言国家 System.IFormatProvider format=new System.Globalization.CultureInfo("zh-CN",true); //指定转换格式 Response.Write(DateTime.ParseExact(this.TextBox1.Text,"yyyyMMdd",format)); 这样他就能看出20031231号的日期格式了不过可惜他只能够对yyyyMMdd形式进行不能对其它格式进行转换是不是美中不足? 不过.NET提供了另一种重载版本. public static DateTime ParseExact(string,string[],IFormatProvider,DateTimeStyles); 可对指定的几种日期格式进行转换. 不过具体的操作我想还是大家自己去试验一下效果可能会更好一些
2.sql中的时间格式
函数或数据表里的字段*/CONVERT(varchar(10),23) 结果:2007-02-01 /*varchar(10)表示日期输出的格式,如果不够长会发生截取*/语句及查询结果:Select CONVERT(varchar(100),GETDATE(),0): 05 16 2006 10:57AMSelect CONVERT(varchar(100),1): 05/16/06Select CONVERT(varchar(100),2): 06.05.16Select CONVERT(varchar(100),3): 16/05/06Select CONVERT(varchar(100),4): 16.05.06Select CONVERT(varchar(100),5): 16-05-06Select CONVERT(varchar(100),6): 16 05 06Select CONVERT(varchar(100),7): 05 16,06Select CONVERT(varchar(100),8): 10:57:46Select CONVERT(varchar(100),9): 05 16 2006 10:57:46:827AMSelect CONVERT(varchar(100),10): 05-16-06Select CONVERT(varchar(100),11): 06/05/16Select CONVERT(varchar(100),12): 060516Select CONVERT(varchar(100),13): 16 05 2006 10:57:46:937Select CONVERT(varchar(100),14): 10:57:46:967Select CONVERT(varchar(100),20): 2006-05-16 10:57:47Select CONVERT(varchar(100),21): 2006-05-16 10:57:47.157Select CONVERT(varchar(100),22): 05/16/06 10:57:47 AMSelect CONVERT(varchar(100),23): 2006-05-16Select CONVERT(varchar(100),24): 10:57:47Select CONVERT(varchar(100),25): 2006-05-16 10:57:47.250Select CONVERT(varchar(100),100): 05 16 2006 10:57AMSelect CONVERT(varchar(100),101): 05/16/2006Select CONVERT(varchar(100),102): 2006.05.16Select CONVERT(varchar(100),103): 16/05/2006Select CONVERT(varchar(100),104): 16.05.2006Select CONVERT(varchar(100),105): 16-05-2006Select CONVERT(varchar(100),106): 16 05 2006Select CONVERT(varchar(100),107): 05 16,2006Select CONVERT(varchar(100),108): 10:57:49Select CONVERT(varchar(100),109): 05 16 2006 10:57:49:437AMSelect CONVERT(varchar(100),110): 05-16-2006Select CONVERT(varchar(100),111): 2006/05/16Select CONVERT(varchar(100),112): 20060516Select CONVERT(varchar(100),113): 16 05 2006 10:57:49:513Select CONVERT(varchar(100),114): 10:57:49:547Select CONVERT(varchar(100),120): 2006-05-16 10:57:49Select CONVERT(varchar(100),121): 2006-05-16 10:57:49.700Select CONVERT(varchar(100),126): 2006-05-16T10:57:49.827Select CONVERT(varchar(100),130): 18 ???? ?????? 1427 10:57:49:907AMSelect CONVERT(varchar(100),131): 18/04/1427 10:57:49:920AM说明:使用 CONVERT:CONVERT ( data_type [ ( length ) ],expression [,style ] )参数expression是任何有效的 Microsoft® sql Server™ 表达式。。data_type目标系统所提供的数据类型,包括 bigint 和 sql_variant。不能使用用户定义的数据类型。lengthnchar、nvarchar、char、varchar、binary 或 varbinary 数据类型的可选参数。style日期格式样式,借以将 datetime 或 smalldatetime 数据转换为字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型);或者字符串格式样式,借以将 float、real、money 或 smallmoney 数据转换为字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型)。sql Server 支持使用科威特算法的阿拉伯样式中的数据格式。在表中,左侧的两列表示将 datetime 或 smalldatetime 转换为字符数据的 style 值。给 style 值加 100,可获得包括世纪数位的四位年份 (yyyy)。不带世纪数位 (yy) 带世纪数位 (yyyy)标准输入/输出**- 0 或 100 (*) 默认值 mon dd yyyy hh:miAM(或 PM)1 101 美国 mm/dd/yyyy2 102 ANSI yy.mm.dd3 103 英国/法国 dd/mm/yy4 104 德国 dd.mm.yy5 105 意大利 dd-mm-yy6 106 - dd mon yy7 107 - mon dd,yy8 108 - hh:mm:ss- 9 或 109 (*) 默认值 + 毫秒 mon dd yyyy hh:mi:ss:mmmAM(或 PM)10 110 美国 mm-dd-yy11 111 日本 yy/mm/dd12 112 ISO yymmdd- 13 或 113 (*) 欧洲默认值 + 毫秒 dd mon yyyy hh:mm:ss:mmm(24h)14 114 - hh:mi:ss:mmm(24h)- 20 或 120 (*) ODBC 规范 yyyy-mm-dd hh:mm:ss[.fff]- 21 或 121 (*) ODBC 规范(带毫秒) yyyy-mm-dd hh:mm:ss[.fff]- 126(***) ISO8601 yyyy-mm-dd Thh:mm:ss.mmm(不含空格)- 130* Hijri**** dd mon yyyy hh:mi:ss:mmmAM- 131* Hijri**** dd/mm/yy hh:mi:ss:mmmAM* 默认值(style 0 或 100、9 或 109、13 或 113、20 或 120、21 或 121)始终返回世纪数位 (yyyy)。** 当转换为 datetime时输入;当转换为字符数据时输出。*** 专门用于 XML。对于从 datetime或 smalldatetime 到 character 数据的转换,输出格式如表中所示。对于从 float、money 或 smallmoney 到 character 数据的转换,输出等同于 style 2。对于从 real 到 character 数据的转换,输出等同于 style 1。****Hijri 是具有几种变化形式的日历系统,Microsoft® sql Server™ 2000 使用其中的科威特算法。重要 默认情况下,sql Server 根据截止年份 2049 解释两位数字的年份。即,两位数字的年份 49 被解释为 2049,而两位数字的年份 50 被解释为 1950。许多客户端应用程序(例如那些基于 OLE 自动化对象的客户端应用程序)都使用 2030 作为截止年份。sql Server 提供一个配置选项("两位数字的截止年份"),借以更改 sql Server 所使用的截止年份并对日期进行一致性处理。然而最安全的办法是指定四位数字年份。当从 smalldatetime 转换为字符数据时,包含秒或毫秒的样式将在这些位置上显示零。当从 datetime 或 smalldatetime 值进行转换时,可以通过使用适当的 char 或 varchar 数据类型长度来截断不需要的日期部分。
Eval()时间格式化 <%# Eval("C_FromTime","{0:d}") %> DateTime.Parse(EquInfo.FindEquInfoByID(Request["id"]).InDate).ToShortDateString()标准的Format格式Format Format 模式d MM/dd/yyyy 如(2001-3-27)D dddd,MMMM dd,yyyy 如(2001年3月27日)f dddd,yyyy HH:mm 如(2001年3月27日 0:00)F dddd,yyyy HH:mm:ss 如(2001年3月27日 0:00:00)g MM/dd/yyyy HH:mm 如(2001-3-27 0:00)G MM/dd/yyyy HH:mm:ss 如(2001-3-27 0:00:00)m,M MMMM dd 如(三月 27)r,R ddd,dd MMM yyyy HH’:’mm’:’ss ’GMT’ 如(Mon,26 Mar 2001 16:00:00 GMT)s yyyy-MM-dd HH:mm:ss 好像不能使用t HH:mm 如(0:00)T HH:mm:ss 如(0:00:00)u yyyy-MM-dd HH:mm:ss 如(2001-03-26 16:00:00Z)U dddd,yyyy HH:mm:ss 如(2001年3月26日 16:00:00)y,Y MMMM,yyyy 如(2001年3月)自定义格式列表Format Pattern Descriptiond 如:2001-3-27dd 如:27ddd 如:星期一dddd 如:星期一(全名)M 如:三月 27MM 如:03MMM 如:三月MMMM 如:三月(全称)y 如:2001年3月yy 如:01yyyy 如:2001gg 如:A.D.hh,hh* 如:12HH,HH* 如:00m 如:三月 27mm,mm* 如:00(分钟)s 如:2001-03-27T00:00:00ss,ss* 如:00(秒)t 如:0:00tt,tt* 如:上午
Microsoft SQL Server Like关键字
例如:名称像’大卫’获取所有名称大卫或大卫或daVid等.
我的目标是只获得大卫.我有兴趣了解专家的不同方式.
解决方法
SELECT * FROM myTable WHERE LastName COLLATE latin1_General_CS_AS = 'smyTH'
MS SQLSERVER使用问题总结
昨天晚上服务器上论坛出现问题,于是我重装了论坛一下,后来我把原来的数据库中的内容重新导入了过来,但是用的是和论坛web.config中一样的字符串连接方法但是总是不可以,我就先判断是否是权限的问题,因为我在导入数据库的时候总是出错,因为论坛数据库中的表的所有者都是某个用户,所以导致导入失败,后来我新建了一个数据库,我建立这个用户的时候我不赋予它system administrators的权限,后来我在导入的时候就成功了,原来如果选择了这个权限,那么就是完全不同的用户了,所以,要享用原来的数据库用户信息,就必须给与他们相同的用户权限信息,这样子数据库的数据就完全导入成功了,嘘,万岁,终于没有让数据丢失。
经验总结:每当遇到这种情况的时候,不要着急,点上一只烟,帮我镇定镇定情绪,戒骄戒躁,多思考办法,不要急于做事,三思而后行。
接下来是我用了这个数据库的用户进行连接的时候怎么总是连接不上呢,后来我又换了sa尝试,结果数据库是连接上了,但是提示没有某个我要操作的表的权限,也就是说没有找到这个表的对象,我就把这个表的权限修改成这个用户拥有权限,方法是选择该对象,右键所有任务--〉权限勾选相应的权限就可以了,但是还不可以,晕,
第二天,我一直都在想着这个事情,我起来就打开电脑,看时候有奇迹出现,不行,电脑好不留情的显示了asp.net惯有的黄色的出错页面,只好寻求同事帮助了,后来我commit到svn上,同事一运行正常,
解决这次问题结合了两个地方,一个是一个用户的对象如果要让别的用户访问,就必须让其他的用户具有权限,第二,网络连接端口的问题,电脑总是这样按照一定的规律去做事,根本不讲究一点感情,甚至有的时候还耍点小脾气,这种情况,要胸怀大度,不要过分较真,要顺着他,给他甜头,他还是非常乐意为我们效劳的。
古人云:要取之先与之。
SQL Server索引-LIKE查询有任何改进吗?
我们有一个查询,该查询运行于一个很大的表上,不幸的是,该表需要在几个varchar字段上使用LIKE’%ABC%’,以便用户可以搜索部分名称等。SQL
Server 2005
使用LIKE时,在这些varchar字段上添加索引是否对选择查询性能有帮助?或者在这种情况下,它基本上会忽略索引并进行全面扫描吗?
使用LIKE时还有其他可能的方法来提高性能吗?
答案1
小编典典仅当您向这些列添加全文搜索并使用SQL Server的全文查询功能时。
否则,否定,索引将无济于事。
今天关于淡sqlserver对like '%关键词%' 处理时的索引利用问题和sql关键字like的介绍到此结束,谢谢您的阅读,有关C#和SqlServer中处理时间格式问题、Microsoft SQL Server Like关键字、MS SQLSERVER使用问题总结、SQL Server索引-LIKE查询有任何改进吗?等更多相关知识的信息可以在本站进行查询。
本文标签: