数据库(五)Oracle 和 MySQL 的一些区别

团队最近正在计划将项目从 Oracle 数据库迁移到 MySQL,特此整理一份 Oracle 字段、函数、建表语句的差异。

字段差异

整数

在 Oracle 中,数字统一使用 NUMBER(m) ,NUMBER(6) 最大值为 999999 ,NUMBER(6,2) 最大值为 9999.99,如果不指定m值,直接写 NUMBER,则默认为浮点数,精度根据实际情况。

在 MySQL 中,整数分为 tinyint、smallint、mediumint、int 和 bigint 五种,区别如下:

整数类型 字节数 比特数 取值范围
tinytint 1字节 8 bit (2^8) -128 到 127
smallint 2字节 16 bit (2^16) -32768 到 32767
mediumint 3字节 24 bit (2^24) -8388608 到 8388607
int 4字节 32 bit (2^32) -2147483648 到 2147483647
bigint 8字节 64 bit (2^64) -9223372036854775808 到 9223372036854775807

在 MySQL 中,int(4) 表示 zerofill 为 4,实际上是可以插入大于 4 位的数值比如 12345,只不过,当不足 4 位的时候,在左边会填充 0 ,例如对于 int(4), 插入 123,显示的是 0123, 对于 int(5),插入 123,显示的是 00123。

阅读更多

数据库(四)MySQL优化

在 MySQL 中,使用恰当的数据类型,以及合理使用索引和查询,能够提升不少性能。这一篇介绍一下这三种情况的优化。


SQL执行过程

想要优化,先得了解一条SQL查询语句的执行过程。

MySQL 大致架构为: 客户端 - Server层 - 存储引擎

客户端

客户端用来发起一次SQL请求。

Server层

Server有以下组件:

  1. 连接器:连接器负责跟客户端建立连接、获取权限、维持和管理连接。
  2. 查询缓存:之前执行过的语句,会先放在缓存里。
  3. 分析器:词法分析、语法分析
  4. 优化器:优化语句,决定如何使用索引
  5. 执行器:判断权限,开始执行语句

存储引擎

负责数据的存储和提取。插件式架构,支持InnoDB、MyISAM、Memory等多个存储引擎。


Schema与数据类型优化

基本原则

  • 更小:如果只要存0-200,tinyint unsignedint
  • 简单:用内建类型表示时间而不是varchar
  • 避免NULL:有 NULL 的列使得索引、索引统计和值比较更加复杂。虽然调优时把NULL改NOT NULL性能提升较小,但是如果要在列上建索引,就应该避免 NULL
阅读更多

数据库(三)索引

什么是索引?

概念

索引是一个单独存储在磁盘上的数据结构,包含着对数据表里所有记录的引用指针。

作用

使用索引可以 提高数据库特定数据的查询速度

实现位置

在存储引擎中实现。

结构类型

BTree 和 Hash table,具体哪种和表的存储引擎有关。MyISAM 和 InnoDB 只支持 BTree ,MEMORY 同时支持 BTree 和 Hash table。


阅读更多

数据库(二)存储引擎、事务、锁

存储引擎

存储引擎是数据库的底层软件组织。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,可以获得其各自特定的功能。

InnoDB

InnoDB 是 MySQL 默认的存储引擎,它是面向在线事务处理(OLTP)的应用,被设计用来处理大量的短期(short-lived)事务。

特点:

  1. 采用 MVCC(多版本并发控制)来支持高并发
  2. 支持事务,实现了 4 个事务隔离级别,默认级别是可重复读
  3. 通过间隙锁(next-key locking)防止幻读,间隙锁使得 InnoDB 不仅仅锁定查询涉及的行,还会对索引中的间隙进行锁定,防止幻影行的插入
  4. 聚簇索引,主键查询性能高,但二级索引(非主键索引)必须包含主键列,如果主键列很大,其他索引都会很大
  5. 存储格式平台独立
  6. 行锁设计
  7. 支持外键
  8. 支持一致性非锁定读(默认情况下读取操作不会产生锁)
  9. 提供了插入缓冲,二次写,内存自适应哈希索引,预读等高性能和高可用的功能
  10. 支持真正的热备份

一句话概括:InnoDB的优势在于提供了良好的事务处理、崩溃修复能力和并发控制。缺点是读写效率较差,占用的数据空间相对较大。

MyISAM

MyISAM 存储引擎表由 .MYD 和 .MYI 组成,.MYD用来存放数据文件,.MYI用来存放索引文件,特点:

  • 不支持事务
  • 表锁设计,读取共享锁,写入排他锁。但是在读取查询的同时也能插入记录(并发插入)
  • 支持全文索引
  • 压缩
  • 空间函数(GIS)
  • 它的缓冲池只缓冲索引文件,而不缓冲数据文件
  • 崩溃后无法安全修复

一句话概括:MyISAM的优势在于占用空间小,处理速度快。缺点是不支持事务的完整性和并发性。如果表经常读取,且不需要事务,MyISAM是合适的选择。

MEMORY

将表中的数据存放在内存中,如果数据库重启或发生崩溃,表中的数据库都将消失,它非常适合存储临时数据的临时表.默认采用哈希索引。

三种存储引擎的比较

Engine

阅读更多
Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×