Oracle与MySQL性能比较

北战南征 提交于 2019-12-03 22:05:00

oracle优点:

1、处理速度快,非常快

2、安全级别高。支持快闪以及完美的恢复,即使硬件坏了 也可以恢复到故障发前的1s

3、几台数据库做负载数据库,可以做到30s以内故障转移

4、网格控制,以及 数据仓库方面 也非常强大

oracle缺点:

1.不开源

2.收费高

至于mysql:

1.号称世界最快的数据库,连yahoo、google都用它,又免费,前途无量

2.但是,mysql没有事务的概念

Oracle数据库与MySQL数据库的主要区别如下:

0 组函数用法规则
 
   mysql 中组函数在 select 语句中可以随意使用,但在 oracle 如果查询语句中有组函数,那其他列名必须是组函数处理过的,或者是 group by 子句中的列 否则报错
 
   eg
 
   select name count money  from user  ;这个放在 mysql 中没有问题 oracle 中就有问题了.............
 
   2 自动增长的数据类型处理
 
   MYSQL 有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值。 ORACLE 没有自动增长的数据类型,需要建立一个自动增长的序列号,插入记录时要把序列号的下一个值赋于此字段。
 
   CREATE SEQUENCE  序列号的名称 (最好是表名+序列号标记)  INCREMENT BY 1 START WITH 1 MAXVALUE 99999 CYCLE NOCACHE
 
  其中最大的值按字段的长度来定, 如果定义的自动增长的序列号  NUMBER 6 最大值为 999999
 
   INSERT  语句插入这个字段值为: 序列号的名称. NEXTVAL
 
   3 单引号的处理
 
   MYSQL 里可以用双引号包起字符串, ORACLE 里只可以用单引号包起字符串。在插入和修改字符串前必须做单引号的替换:把所有出现的一个单引号替换成两个单引号。
 
   4 翻页的 SQL 语句的处理
 
   MYSQL 处理翻页的 SQL 语句比较简单,用 LIMIT  开始位置, 记录个数; PHP 里还可以用 SEEK 定位到结果集的位置。 ORACLE 处理翻页的 SQL 语句就比较繁琐了。每个结果集只有一个 ROWNUM 字段标明它的位置, 并且只能用 ROWNUM<100 不能用 ROWNUM>80
 
  以下是经过分析后较好的两种 ORACLE 翻页 SQL 语句(  ID 是唯一关键字的字段名 ):
 
  语句一:
 
   SELECT ID  [FIELD_NAME ,... ] FROM TABLE_NAME WHERE ID IN   SELECT ID FROM SELECT ROWNUM AS NUMROW  ID FROM TABLE_NAME WHERE  条件 1 ORDER BY  条件
 
   80 AND NUMROW < 100   ORDER BY  条件 3
 
  语句二:
 
   SELECT * FROM  ((  SELECT ROWNUM AS NUMROW  c * from  select [FIELD_NAME ,... ] FROM TABLE_NAME WHERE  条件 1 ORDER BY  条件
 
   80 AND NUMROW < 100   ORDER BY  条件 3
 
   5 长字符串的处理
 
  长字符串的处理 ORACLE 也有它特殊的地方。 INSERT UPDATE 时最大可操作的字符串长度小于等于 4000 个单字节, 如果要插入更长的字符串, 请考虑字段用 CLOB 类型,方法借用 ORACLE 里自带的 DBMS_LOB 程序包。插入修改记录前一定要做进行非空和长度判断,不能为空的字段值和超出长度字段值都应该提出警告,返回上次操作。
 
   6 日期字段的处理
 
   MYSQL 日期字段分 DATE TIME 两种, ORACLE 日期字段只有 DATE ,包含年月日时分秒信息,用当前数据库的系统时间为 SYSDATE 精确到秒,或者用字符串转换成日期型函数 TO_DATE ‘2001 08 01’ ’YYYY MM DD’ )年-月-日  24 小时:分钟:秒 的格式 YYYY MM DD HH24 MI SS TO_DATE ()还有很多种日期格式, 可以参看 ORACLE DOC .日期型字段转换成字符串函数 TO_CHAR ‘2001 08 01’ ’YYYY MM DD HH24 MI SS’
 
  日期字段的数学运算公式有很大的不同。 MYSQL 找到离当前时间 7 天用
 
   SUBDATE NOW (), INTERVAL 7 DAY ORACLE 找到离当前时间 7 天用
 
   SYSDATE   7
 
   MYSQL 中插入当前时间的几个函数是: NOW ()函数以 `'YYYY MM DD HH MM SS' 返回当前的日期时间,可以直接存到 DATETIME 字段中。 CURDATE ()以 ’YYYY MM DD’ 的格式返回今天的日期,可以直接存到 DATE 字段中。 CURTIME ()以 ’HH MM SS’ 的格式返回当前的时间,可以直接存到 TIME 字段中。例: insert into tablename  fieldname  values  now ())
 
  而 oracle 中当前时间是 sysdate
 
   7 空字符的处理
 
   MYSQL 的非空字段也有空的内容, ORACLE 里定义了非空字段就不容许有空的内容。按 MYSQL NOT NULL 来定义 ORACLE 表结构, 导数据的时候会产生错误。因此导数据时要对空字符进行判断,如果为 NULL 或空字符,需要把它改成一个空格的字符串。
 
   8 字符串的模糊比较
 
   MYSQL 里用 字段名  like '% 字符串 %' ORACLE 里也可以用 字段名  like '% 字符串 %'  但这种方法不能使用索引, 速度不快,用字符串比较函数  instr (字段名, ' 字符串 ' >0  会得到更精确的查找结果。
 
   9 程序和函数里,操作数据库的工作完成后请注意结果集和指针的释放。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!