代码之家  ›  专栏  ›  技术社区  ›  wishihadabettername

长期使用Oracle的用户切换到MySQL,有什么需要注意的吗?

  •  3
  • wishihadabettername  · 技术社区  · 15 年前

    是否存在任何问题(Oracle用户所期望的工作不正常的情况)?任何与事务管理、锁定、隔离级别、索引之类的东西有关的东西。

    3 回复  |  直到 15 年前
        1
  •  11
  •   Community CDub    8 年前

    MySQL有各种各样的引擎——主要的是INNODB和MyISAM。 MyISAM does not support transactions, nor foreign key constraints . 隔离级别是相似的-这些似乎是相对标准的数据库之间的这些天。

    索引是不同的-MySQL有聚集索引和非聚集索引。聚集索引通常用于主键,但不一定。还有 a limit on the space for defining indexes - 767 for INNODB, 1,000 for MyISAM . 支持覆盖索引,不支持基于函数的索引。。。

    优化器只能对每个SELECT子句使用一个索引-检查EXPLAIN PLAN输出。有语法来指定要使用的索引,但它只是一个提示&仍然可以被优化器忽略。

    约束条件

    CHECK constraint syntax, but no engine enforces it currently . 唯一的选择是使用触发器。唯一约束在MySQL中作为索引实现。

    自定义错误处理

    您需要声明用于自定义错误处理的处理程序: http://dev.mysql.com/doc/refman/5.0/en/declare-handler.html

    以前-
    MySQL不支持定义自定义错误来区分数据完整性和业务规则错误。

    分析/排名/窗口功能

    使用语法-子查询分解

    another thing MySQL does not have

    分层查询支持

    你猜到了-没有对层次查询的递归支持。甲骨文的连接从v2开始(!!),但是ANSI标准是使用WITH子句,就像您在SQLServer2005+中看到的那样。

    MySQL不支持物化视图,并且 view support is crippled - can't use subqueries, for example

    这是ANSI标准语法;Oracle在11g中开始支持,但MySQL又不支持。唯一的选择是CASE表达式和聚合函数,这仍然是实现此功能的最可移植的方法(SQLServer2005+支持PIVOT/UNPIVOT)。

    序列

    MySQL不支持序列,最接近的是将INT列定义为auto\ u increment。这使得在两个或多个表中使用相同的值序列非常困难(如果不需要的话,这不是您真正想要的)。此外,每个表只能定义一个自动增量列。这个 increment and offset is instance-wide -更改它,就会影响实例所服务的每个数据库中的每个自动增量列。重置自动增量值需要ALTER TABLE特权;删除/截断数据不会改变当前值。

    注意,MySQL不支持RETURNING子句。 You need to use LAST_INSERT_ID() to retrieve the auto_increment value for a newly created row .

    MySQL没有数字数据类型- it splits numerics into INT, MEDIUMINT, etc. MySQL's TEXT (TINYTEXT, TEXT, MEDIUMTEXT, and LONGTEXT) 数据类型比Oracle的VARCHAR2的4000限制更适合。MySQL支持CLOB和BLOB。。。

    包、存储过程、函数

    MySQL支持用户定义的函数和存储过程—我还没有遇到支持类似于Oracle包的数据库。SQL Server具有CLR程序集,但它要求使用.NET CLR代码,而不是本机TSQL/PLSQL。

        2
  •  2
  •   halfer    7 年前

    我会仔细观察记忆水平。它们不是自调整的,可能需要仔细调整系统范围和每个线程的内存缓存和使用情况。

    查询缓存在很大程度上是全局的。这会在启用缓存时导致全局锁定条件。

    对于大多数实例和MySQL的大部分生命,每个查询的每个表引用只能有一个索引。这会增加高性能情况下所需的索引数量。

    从机端的数据库复制是单线程的。这意味着主设备的写入速度远远快于从设备在相同硬件上的写入速度。

        3
  •  0
  •   ina    15 年前

    对于当前的MySQL,基本SQL将完全相同,但是MySQL不能很好地处理大型表/db~在中端Intel Xeon服务器上的MyISAM上有1000万个条目,开始出现数据错误。

    但是,由于Oracle已经购买了MySQL,这些差异最终可能会消失。