参考原始文档后, 自已总结一下, 有不对的地方请指正. 在数据库中对数据的访问总存在不同的方法, MySQL中比较常的有以下几种, 在这儿按从好到坏的顺序排列. 在Oracle的Concept文档中, Oracle RBO有十六种不同的访问方法, MySQL中主要有以8种:
1, 访问系统固定(Constant)表 -- system.2, 访问用户的固定表 -- const.3, 在主键或维一性索引上用等于查找 -- eq_ref.4, 在非空列的索引上用等于查找 -- ref.5, 在允许空值的索引上用等于查找 -- ref_or_null.6, 在索引上按范转查找 -- range.7, 扫描整个索引 -- index.8, 扫描整全表 -- all.
MySQL总按这个顺序来选择最佳的访问方法, 在多个表进行关联(Join)时, MySQL基本上会选择从具有最佳访问路径的表开始, 按这个顺序进行排列来确定关联顺序.
这样的访问方法在大都数情况下都是合理的, 如果MySQL能象Oracle一样搞个统计值(CBO), 就会更好了. 另外我还不知道MySQL可不可以用Hint来指定一个表的访问方法, 到止前为止, 还是人脑比较聪明.
留言 (4)
当你开始写MYSQL后,仿佛一瞬间大伙都没有兴趣了,嘻嘻!
我暂时还不打算研究MySQL, 在北美,MySQL的薪水没法跟Oracle DBA相提并论,差的老远哩.
(一个免费的东西,谁会花大价钱雇人维护;虽然现在MySQL维护费用暴增)
我们新移民,首要问题是生存,然后才是如何美好生活.
Posted by 木匠 | Apr 6, 2007 2:58 AM
当越来越多的大公司启用MySQL后, 会发生改变的. 现在找个MySQL高手要比找个Oracle高手难多了.
Posted by anysql | Apr 6, 2007 8:24 AM
hints也是支持的,只是没有oracle那么丰富
select count(*) from tabname force index(indexname)
Posted by fulbird | Apr 6, 2007 11:32 AM
MySQL的也支持一些hint,如STRAIHT_JOIN指定严格按FROM子句的顺序进行联接,force index/ignore index可选择使用的索引等。
Posted by 风轻扬 | Apr 9, 2007 5:58 PM