900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > mysql分页的高效算法_mysql_海量数据库的查询优化及分页算法方案

mysql分页的高效算法_mysql_海量数据库的查询优化及分页算法方案

时间:2019-05-17 03:14:01

相关推荐

mysql分页的高效算法_mysql_海量数据库的查询优化及分页算法方案

mysql 海量数据库的查询优化及分页算法方案

文章分类:数据库

转自链

接:/doc/c548420fba1aa8114431d9a4.html/database/110/256c64abb774f5680a270b456166f79 5.htm

select * from table1 where name=…zhangsan… and tID > 10000

和执行:

select * from table1 where tID > 10000 and name=…zhangsan…

一些人不知道以上两条语句的执行效率是否一样,因为如果简单的从语句先后上看,这两个语句的确是不一样,如果tID是一个聚合索引,那么后一句仅仅从表的10000条以后的记录中查找就行了;而前一句则要先从全表中查找看有几个name=…zhangsan…的,而后再根据限制条件条件tID>10000来提出查询结果。

事实上,这样的担心是不必要的。SQL SERVER中有一个“查询分析优化器”,它可以计算出where子句中的搜索条件并确定哪个索引能缩小表扫描的搜索空间,也就是说,它能实现自动优化。

虽然查询优化器可以根据where子句自动的进行查询优化,但大家仍然有必要了解一下“查询优化器”的工作原理,如非这样,有时查询优化器就会不按照您的本意进行快速查询。

在查询分析阶段,查询优化器查看查询的每个阶段并决定限制需要扫描的数据量是否有用。如果一个阶段可以被用作一个扫描参数(SARG),那么就称之为可优化的,并且可以利用索引快速获得所需数据。

SARG的定义:用于限制搜索的一个操作,因为它通常是指一个特定的匹配,一个值得范围内的匹配或者两个以上条件的AND连接。形式如下:

列名操作符

操作符列名

列名可以出现在操作符的一边,而常数或变量出现在操作符的另一边。如:

Name=?张三?

价格>5000

5000

Name=?张三? and 价格>5000

如果一个表达式不能满足SARG的形式,那它就无法限制搜索的范围了,也就是SQL SERVER 必须对每一行都判断它是否满足Where子句中的所有条件。所以一个索引对于不满足SARG 形式的表达式来说是无用的。

介绍完SARG后,我们来总结一下使用SARG以及在实践中遇到的和某些资料上结论不同的经验:

1、Like语句是否属于SARG取决于所使用的通配符的类型

如:name like …张%? ,这就属于SARG

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。