MySQL中的RBO特性, 数据访问方法的排名

    参考原始文档后, 自已总结一下, 有不对的地方请指正. 在数据库中对数据的访问总存在不同的方法, 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维护费用暴增)

我们新移民,首要问题是生存,然后才是如何美好生活.

当越来越多的大公司启用MySQL后, 会发生改变的. 现在找个MySQL高手要比找个Oracle高手难多了.

hints也是支持的,只是没有oracle那么丰富
select count(*) from tabname force index(indexname)

MySQL的也支持一些hint,如STRAIHT_JOIN指定严格按FROM子句的顺序进行联接,force index/ignore index可选择使用的索引等。

发表留言:

« Previous | Main | Next »

英语900句 | English 900

  • What time do you finish your work?
  • 你什么时候下班?
  • At 6 o'clock sharp. 6
  • 点.
  • What do you do in your spare time?
  • 闲暇时, 你干些什么?
  • I like listening to pop music.
  • 我喜欢听流行音乐.
  • I like playing football.
  • 我喜欢踢足球.