|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
在执行崩溃恢复时,理解在一个数据库中的每一个表tbl_name对应的在数据库目录中的3个文件是很重要的:1,慎用distinct关头字
在上一节中我们有讲到可使用distinct关头字来优化sql查询,但同时我们又讲到要慎用distinct关头字。假如我们查询的字段只要一个大概很大批的字段,那末就能够利用它。但假如我们的select中有大批的字段,那末该关头字会年夜年夜下降查询的效力,这是由于利用distinct关头字后,sql引擎会在了局会合对一切的了局依据distinct后的列排序过滤等大批的事情,假如查询了局中的列多了,那末排序的庞大性就会呈多少倍数的增添,查询效力天然就会分明的下降了。
我们来看上面的select语句,并检察实行所需的工夫。
selectid,gid,name,did,model,unitfromtable1
在小编的盘算机中实行工夫为36秒。
我们再在select中利用distinct关头字,sql语句以下:
selectdistinctid,gid,name,did,model,unitfromtable1
明显,这条sql会比上条sql查询出的了局要少,但在小编的盘算机中却实行了2分钟。可见,distinct会多影响查询效力了。
2,慎用union关头字
union的功效是将多个了局汇合成一个了局集,它请求兼并的多个了局集的列数与列的数据范例不异。同时它会在兼并后过滤失落不异行的数据。正由于它会过滤失落不异行的数据,地点它在兼并后会有一系列庞大的排序过滤等举措,所distinct关头字一行,多个字段的排序与对照是很耗时的。我们保举利用unionall来取代union,固然union不外滤不异的行,但实在在年夜部分情形下,我们都是不必要过滤不异行的。
3,不要在in关头字中利用子查询
假如in关头字中是常量,如wherenamein(a,b,c)这类没有干系。但只管制止用wherename
in(selectnamefromtable1)如许的查询前提。由于在in关头字中利用子查询后是没法利用索引的。
4,不要在like顶用左包括%与全包括%
如wherelike%xxx与wherelike%xxx%。缘故原由也是由于在like顶用了左包括%与全包括%后没法利用索引,但右包括%不妨。
5,不要在where前提中利用函数
一样缘故原由,在where前提中利用函数会招致索引不成用。
上面给出一切会招致索引不成用的情形:
(1)对索引列利用了函数或盘算
(2)对索引列利用了Like%X或Like%X%
(3)在组合索引的第1列不是利用最多的列
(4)在Where子句中利用了In(子查询)
(5)数据范例转换将招致不克不及使用索引
(6)负向对照将招致不克不及使用索引如果某个数据列里包含许多重复的值,就算为它建立了索引也不会有很好的效果。比如说,如果某个数据列里包含的净是些诸如“0/1”或“Y/N”等值,就没有必要为它创建一个索引。 |
|