SQL SERVER中from数据源解析过程
来源:互联网 发布:用java做音乐网站 编辑:程序博客网 时间:2024/06/05 17:28
对于from字段后面的表,大家对于多张表的排序有思考过么?
1、推荐书写方式
select * from Users
joinPoints
on
Users.UserID=Points.UserID
join
Courses
on
Points.CousreID=Courses.CourseID
2、
SELECT * from Users,Points,Courses
WHERE Users.UserID=Points.UserID
AND Points.CousreID=Courses.CourseID
3、
SELECT * from Points,Courses,Users
WHERE Users.UserID=Points.UserID
AND Points.CousreID=Courses.CourseID
4、
SELECT * from Courses,Points,Users
WHERE Users.UserID=Points.UserID
AND Points.CousreID=Courses.CourseID
对于出来的结果集也是一目了然。
我不知道微软是怎么处理这个数据源集合的,不过由以上分析可知:SQL SERVER 的解析器是从左往有解析数据源,依次做笛卡尔积
所以这也为我们做数据优化给了一些建议。
每次做完依次笛卡尔积,SQL SERVER上网解析器就会从where条件筛选器中把不符合的数据剔除,所以我们把结果集小的放在前面就可以避免出现大的笛卡尔积存在。
但是我很不解的是,SQL SERVER 2008R2的联机丛书里面提到了SQL查询优化器,这个东西是怎么运行的我就不得而知了。
不过从文档来看,微软是自己对这个部分有着优化过程的,而oracle的数据库没有做。
ORACLE数据库SQL解析器是从右至左解析,从上面结果来看SQL SERVER是从左至右的。
作为一名DBA来说,这一些细节都可能决定着数据库的性能。
所以我们也疑惑了,这一些数据库的SQL 解析器可能都有着自己的特色,要是我们知道并且用得好肯定是皆大欢喜,但是要是我们不知道或者是错误的理解了,那岂不是
自己挖一个坑给自己。
所以我们应该怎么办呐?
对于上面我所列举的这个例子,我想大家还是按我的推荐方式来写SQL查询语句,这样由我们指定合并的路径就绝对不会出错了。
小弟愚见,请大家指教。
0 0
- SQL SERVER中from数据源解析过程
- MyEclipse中配置SQL server数据源
- 操作SQL Server数据源
- 配置sql server数据源
- sql server中存储过程
- 解析SQL Server 的存储过程
- 解析 SQL Server 的存储过程
- SQL Server 存储过程解析XML传参
- sql server中死锁解析
- SQL SERVER 2008用Select操作处理数据(三)——From子句数据源
- 在struts框架中 配SQL SERVER 的数据源
- “GridView”+“ObjectDataSource”+“SQL Server存储过程” 实现数据源存储过程分页功能
- sql学习过程1:sql server数据类型解析
- 设置数据源连接SQL SERVER
- SQL server 配置连接数据源
- 配置SQL Server ODBC数据源
- 如何创建 SQL Server 数据源
- sql server中调试扩展存储过程
- CSV文件 生成
- serialVersionUID的作用
- Hive安装
- jsonp实现跨越js调用的原理
- 原型模式 -- 拷贝当前对象的副本
- SQL SERVER中from数据源解析过程
- 深入理解Java序列化中的SerialVersionUid
- Android布局优化
- NFS常见故障解决方法
- 共享内存操作,mmap映射
- getOutputStream() has already been called for this response异常出现的原因和解决方法
- Android事件传递机制
- libpcap 库使用
- 几款代码比较工具