|
|
本帖最后由 hackace 于 2012-12-20 15:17 编辑
有几个问题想请教一下唐老师,
1,上面有人提到了not exists跟left join &&is null , 无论从可读性还是从性能方面,我们都应该用not exists来代替left join &&is null,对吧? 还是不对?
2,string summary的算法是什么? 比如说下面的语句like '%Abingdon%' ,SQL Server也能够预估到19.81行(EstimateRows),这个19.81具体是怎么算出来的?
use AdventureWorks
go
select * from Person.Address where city like '%Abingdon%'
3,操作系统的preemptive scheduling mechanism 对SQLOS的cooperative scheduling mechanism 有何影响?也就是说一个被SQLOS 调度但还没有yield的 worker thread 会不会依然被preemptive scheduling mechanism 强占?如果没有的话,那OK,如果还是会被强占的话,那SQLOS的cooperative scheduling mechanism 的意义何在?
4,一个在备份结束之前已经提交的事务,是否保证在还原的时候,它也一定存在,而没有被undo等?如果能保证,那OK,如果不能,那为什么?
5,SQL server 的cost model是什么,具体的公式是什么样的? 比如说一个T-SQL的StatementSubTreeCost最后算下来是''0.0032831", 那么这个''0.0032831",具体是怎么来的,公式是什么?我知道总的来说COST是IO,CPU加操作符的各个COST的总和,但我想问的是具体的IO,CPU,操作符的COST是如何计算出来的? 比如IO的COST是 0.0022361 ,CPU的COST0.0012083 ,是怎么计算出来的?
6,微软的内存数据库Hekaton的消息最近比较多,我也看到了它的论文 “http://vldb.org/pvldb/vol5/p298_per-akelarson_vldb2012.pdf
在文中 2.5 Version Visibility 的说明中有2个地方,
"Begin field contains a transaction ID " TB 的状态是Active state,那它对其他事务是不可见的
,"End field contains a transaction ID". TE 的状态是Active state,那它对其他事务是不可见的
这两种情况下,只要它的状态是Active state的,对其他的事务都是不可见的,那么这个记录在此刻对其他的事务来说就是“丢失”了,这个情况很可怕啊,怎么解释呢,是不是论文写错了?
|
|