三大關系型數據庫性能測試


Ø  簡介

本文記錄了三大關系型數據庫 SQL ServerMySQLOracle 的性能測試並比較,主要進行單線程、和多線程(模擬並發)的測試,測試內容如下:

1.  運行環境說明

2.  創建數據表

3.  測試代碼

4.  測試結果

 

1.  運行環境說明

1)  測試運行環境:

1.  操作系統

版本

Windows 10 專業版

版本號

1903

處理器

i7-8550U CPU

內存

32G

2.  VS 運行環境

測試項目類型

控制台應用程序

VS 版本

Visual Studio 2019

版本號

16.3.4

 

2)  虛擬機運行環境

1.  操作系統

版本

Window Server 2019 Datacenter

版本號

1809

內存

12G

2.  數據庫

SQL Server 版本

SQL Server 2019(SQL Server 2019 (CTP3.1) - 15.0.1700.37 (X64) Enterprise Evaluation Edition)

MySQL 版本

MySQL8.0(Server version: 8.0.17 MySQL Community Server – GPL)

Oracle 版本

Oracle19c(Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

Version 19.3.0.0.0)

 

2.  創建數據表

1)  SQL Server

--創建數據庫

USE master;    

IF(EXISTS(SELECT * FROM sys.sysdatabases WHERE name='TestDB'))

    DROP DATABASE TestDB;

GO

CREATE DATABASE TestDB

ON PRIMARY

(

    NAME='TestDB_Data',

    FILENAME='D:\Databases\SQL Server 2019\TestDB\TestDB_Data.mdf',

    SIZE=3MB,

    MAXSIZE=5120MB,

    FILEGROWTH=20%

)

LOG ON

(

    NAME='TestDB_Log',

    FILENAME='D:\Databases\SQL Server 2019\TestDB\TestDB_Log.ldf',

    SIZE=1MB,

    MAXSIZE=1024MB,

    FILEGROWTH=1MB

);

 

--創建表

USE TestDB;    

IF (OBJECT_ID('dbo.MyUser', 'U') IS NOT NULL)

    DROP TABLE dbo.MyUser;

GO

CREATE TABLE dbo.MyUser

(

    UserId INT NOT NULL,

    Name VARCHAR(8) NOT NULL,

    Sex TINYINT NOT NULL,

    Age SMALLINT NOT NULL,

    Birthday DATE NOT NULL,

    City VARCHAR(6) NOT NULL,

    IdNumber CHAR(18) NOT NULL,

    Salary FLOAT NULL,

    Remarks VARCHAR(4000) NOT NULL,

    CONSTRAINT PK_MyUser_UserId PRIMARY KEY CLUSTERED

    (

        UserId ASC

    ) ON [PRIMARY],

    CONSTRAINT CK_MyUser_Sex CHECK (Sex >= 0 AND Sex <= 2),

    CONSTRAINT UQ_MyUser_IdNumber UNIQUE(IdNumber)

) ON [PRIMARY];

 

IF (OBJECT_ID('dbo.MyOrder', 'U') IS NOT NULL)

    DROP TABLE dbo.MyOrder;

GO

CREATE TABLE dbo.MyOrder

(

    OrderId INT NOT NULL,

    UserId INT NOT NULL,

    OrderNo VARCHAR(16) NOT NULL,

    TotalAmount FLOAT NOT NULL,

    OrderDate DATE NOT NULL,

    Remarks VARCHAR(4000) NULL,

    CONSTRAINT PK_MyOrder_OrderId PRIMARY KEY CLUSTERED

    (

        OrderId ASC

    ) ON [PRIMARY],

    CONSTRAINT UQ_MyOrder_OrderNo UNIQUE(OrderNo)

) ON [PRIMARY];

 

2)  MySQL

--創建數據庫

CREATE SCHEMA `testdb` DEFAULT CHARACTER SET utf8mb4 ;

 

--創建表

CREATE TABLE `testdb`.`myuser` (

  `UserId` INT NOT NULL,

  `Name` VARCHAR(8) NOT NULL,

  `Sex` TINYINT NOT NULL,

  `Age` SMALLINT NOT NULL,

  `Birthday` DATE NOT NULL,

  `City` VARCHAR(6) NOT NULL,

  `IdNumber` CHAR(18) NOT NULL,

  `Salary` FLOAT NULL,

  `Remarks` VARCHAR(4000) NOT NULL,

  PRIMARY KEY (`UserId`),

  CHECK (Sex >= 0 AND Sex <= 2),

  UNIQUE INDEX `IdNumber_UNIQUE` (`IdNumber` ASC) VISIBLE);

 

CREATE TABLE `testdb`.`myorder` (

  `OrderId` INT NOT NULL,

  `UserId` INT NOT NULL,

  `OrderNo` VARCHAR(16) NOT NULL,

  `TotalAmount` FLOAT NOT NULL,

  `OrderDate` DATE NOT NULL,

  `Remarks` VARCHAR(4000) NULL,

  PRIMARY KEY (`OrderId`),

  UNIQUE INDEX `OrderNo_UNIQUE` (`OrderNo` ASC) VISIBLE);

 

3)  Oracle

--創建表空間

create tablespace myts datafile 'c:\oracle\oradata\testdb\myts01.dbf' size 1024m;

 

--創建用戶

create user user01 identified by pwd123 default tablespace myts;

 

--用戶授權

grant dba to user01;

 

--用戶登錄

conn user01/pwd123;

 

--創建表

CREATE TABLE MyUser (

  UserId NUMBER(10) NOT NULL ,

  Name VARCHAR2(8) NOT NULL ,

  Sex NUMBER(3) NOT NULL ,

  Age NUMBER(5) NOT NULL ,

  Birthday DATE NOT NULL ,

  City VARCHAR2(6) NOT NULL ,

  IdNumber CHAR(18) NOT NULL ,

  Salary FLOAT ,

  Remarks VARCHAR2(4000) NOT NULL ,

  PRIMARY KEY (UserId),

  CONSTRAINT UQ_MyUser_IdNumber UNIQUE (IdNumber),

  CONSTRAINT CK_MyUser_Sex CHECK (Sex >= 0 AND Sex <= 2)

)

 

CREATE TABLE MyOrder (

  OrderId NUMBER(10) NOT NULL ,

  UserId NUMBER(10) NOT NULL ,

  OrderNo VARCHAR2(16) NOT NULL ,

  TotalAmount FLOAT NOT NULL ,

  OrderDate DATE NOT NULL ,

  Remarks VARCHAR2(4000) ,

  PRIMARY KEY (OrderId),

  CONSTRAINT UQ_MyOrder_OrderNo UNIQUE (OrderNo)

)

 

4)  測試代碼

數據庫操作程序:

SQL Server

.NETFramework\v4.7.2\System.Data.dll

MySQL

MySql.Data.8.0.17\lib\net452\MySql.Data.dll

Oracle

Oracle.ManagedDataAccess.19.3.1\lib\net40\Oracle.ManagedDataAccess.dll

注意:使用"E:\Libs\ODAC\ODAC193Xcopy_x64\odp.net4\odp.net\bin\4\Oracle.DataAccess.dll"將會報錯!

具體參考:\數據\Tests\DataBaseTesting\DataBaseTesting.sln

測試截圖(舉例):

clip_image002[18]

 


5)  測試結果

clip_image004[16]

clip_image006[16]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM