求教:SQL查询实现原理? 高分相赠!!!!
假设有一SQL语句:SELECT * FROM table1 WHERE (field1>0 OR field2="test") AND field3<100 ,SQL分析器是如何分析执行的呢?我只想知道WHERE后面的语句实现.
我想首先应语法分析,根据算符优先把各个字段推进栈,然后再pop出来查找(像表达式求值那样)。
如何高效查找?如果feild1,field2,field3 都建立了索引(应为b+树),那么找到匹配的纪录集应该很快,然后再根据 AND ,OR 进行集合的交,并,得到最后的结果集。但是如果(field1>0 OR field2="test")只有一条纪录,而 field3<100 如果有10000条纪录,那么其实找到(field1>0 OR field2="test")再判一下这条纪录的field3是否<100就可以了,用不着费时再去找到10000条纪录后做交集。那么如何判断并忧化呢?
还有如果field2和field3都没有建索引,那么是否只能根据物理纪录一条条判断,岂不是很慢?
我只看过一点数据库原理,还望这方面的高人指点!!!