Oracle与MySQL的差异和对比:配套hands-on参考脚本。
方便客户针对培训课件内容进行动手实践,加强理解。
---------------------------------
-- 主题:Oracle与MySQL的差异和对比
-- 一、MySQL的基础特性
-- 二、重要特性差异对比
-- 三、性能对比和优化技巧
--------------------------------
Hands-on场景环境准备@MySQL实例
--------------------------------
-- Hands-on场景环境准备@MySQL实例
--------------------------------
--Create db & user
CREATE DATABASE demodb;
CREATE USER 'alfred'@'localhost' IDENTIFIED BY 'alfred123';
GRANT ALL PRIVILEGES ON demodb.* TO 'alfred'@'localhost';
GRANT SELECT ON information_schema.* TO 'alfred'@'localhost';
FLUSH PRIVILEGES;
--Create tables
mysql -ualfred -palfred123 -Ddemodb
CREATE TABLE t (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50)
);
Insert into t(name) values ('Alfred'),('Mcdull');
commit;
select * from t;
Hands-on场景1:模拟MDL等待
--------------------------------
-- Hands-on场景1:模拟MDL等待
--------------------------------
--T1@ session1:TRX
begin;
select id from t;
--T2@ session2:DDL【被阻塞】
alter table t add age int;
--T3@ session3:Select【被阻塞】
select id from t;
--T4@ session1:TRX
commit;
--Check process & trx info
show processlist;
select * from information_schema.innodb_trx\G
Hands-on场景2:模拟死锁
--------------------------------
-- Hands-on场景2:模拟死锁
--------------------------------
--T1@ session1
begin;
update t set age=20 where id=1;
--T2@ session2
begin;
update t set age=18 where id=2;
--T3@ session1【被阻塞】
update t set age=18 where id=2;
--T4@ session2【数据库监测到死锁,事务回滚】
update t set age=20 where id=1;
Hands-on场景3:DB读取最小单位
--------------------------------
-- Hands-on场景3:DB读取最小单位
--------------------------------
--Oracle
show parameter db_block_size
--MySQL
show variables like 'innodb_page_size';
Hands-on场景4:查看SQL索引使用情况
--------------------------------
-- Hands-on场景4:查看SQL索引使用情况
--------------------------------
INSERT INTO t (name, age)
SELECT
CONCAT('Name_', FLOOR(RAND() * 10000)),
FLOOR(RAND() * 100)
FROM
(SELECT 1 AS dummy UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) AS t1
CROSS JOIN (SELECT 1 AS dummy UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) AS t2
CROSS JOIN (SELECT 1 AS dummy UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) AS t3
CROSS JOIN (SELECT 1 AS dummy UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) AS t4
CROSS JOIN (SELECT 1 AS dummy UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) AS t5
CROSS JOIN (SELECT 1 AS dummy UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) AS t6
CROSS JOIN (SELECT 1 AS dummy UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) AS t7
LIMIT 10000;
explain select * from t where name='Alfred';
CREATE INDEX idx_name_age ON t(name, age);
CREATE INDEX idx_age ON t(age);
CREATE INDEX idx_name ON t(name);
explain select * from t where name='Alfred';
DROP INDEX idx_name_age ON t;
explain select * from t where name='Alfred';
Hands-on场景5:MySQL默认存储引擎、binlog、redolog信息确认
--------------------------------------------------------
-- Hands-on场景5:MySQL默认存储引擎、binlog、redolog信息确认
--------------------------------------------------------
show engines;
SELECT @@default_storage_engine;
ps -ef|grep mysql
cd [--datadir]
ls -lrth mysql-bin.*
ls -lrth ib_logfile*
SHOW VARIABLES LIKE 'innodb_log_file_size';
SHOW VARIABLES LIKE 'innodb_log_files_in_group';
Hands-on场景6:查看MySQL业务表的详细状态信息
------------------------------------------
-- Hands-on场景6:查看MySQL业务表的详细状态信息
------------------------------------------
show table status like 't'\G
show index from t;