Mysql基础技能(二)

 

优化器差异

MySQL对子查询会处理为临时表,所以一般JOIN效率比做子查询高。

MySQL在JOIN中对ORDER BY、GROUP BY优化较弱,JOIN中的排序分组几乎都会使用Fille Sort和临时表

MySQL只有RBO,没有CBO,所以总是选择类型上最优的执行计划,而不一定是开销最小的。

MySQL对于OR,很多时候并不会优化成两次索引访问或合并索引,所以OR最好写成两条SQL,做UNION ALL。

IN中存在NULL条件,可能会让优化器走成全表扫描。

 

 

 

SQL方言差异

 

选择部分行:Oracle使用Rownum,MySQL使用LIMIT start,end;

 

执行函数:Oracle需要SELECT f() FROM dual; MySQL可以直接SELECT f();

 

复制数据:Oracle必须有as,CREATE TABLE t AS SELECT * FROM table;

          MySQL的as是可选的,CREATE TABLE t SELECT * FROM table;

 

 

 

常用功能差异

 

锁差异:Oracle锁加在数据块上,InnoDB锁加在主键索因上,所以InnoDB总是有主键索引。

 

导入导出数据:Oracle采用EXP/IMP导入导出。

              MySQL采用mysqldump导出,导入可以采用管道或source。

              mysqldump –u用户 –p密码 DB [table1 table2…] > db.sql

 

提交方式:MySQL默认自动提交,Oracle默认手动提交,MySQL大批量操作最好改变为手动提交,SET AUTOCOMMIT=0

 

SQL缓存:MySQL只能缓存结果集,不能缓存SQL解析结果

 

数据库对象:Oracle将数据库对象编译存储,直接执行二进制码,MySQL只存储代码,临时解析执行,所以MySQL触发器、存储过程等对象创建时仅检查语法,并不检查逻辑

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值