V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  maclean  ›  全部回复第 1 页 / 共 1 页
回复总数  2
2021-04-29 19:30:53 +08:00
回复了 mygreens 创建的主题 数据库 Oracle 相比 mysql 的优势在哪里
ps 关于互联网企业是否使用 oracle 。虽然大部分互联网企业的主营业务确实很少有用 oracle , 但并不影响他们也需要使用 ERP HR 等系统,所以还是会有部分 oracle 的。

互联网公司不使用 oracle 数据库这个印象对很多同学来说是有点深的;为了打破这个错误印象,老刘根据维基百科上的世界上最大的前 20 家互联网公司列表做了梳理, 其中 15 家有使用 oracle 数据库技术占 75%,其中 5 家使用了 Exadata 一体机占 25%,其中 5 家为重度使用占 25%。​​​​比较典型的互联网公司例如 facebook,其实一直在使用 oracle 。Apple 苹果因为不算互联网公司,所以不列在其中,但其也较为重度使用 oracle 。

TOP INTERNET COMPANIES USERS
以下排名根据维基百科 List of the largest Internet companies https://en.wikipedia.org/wiki/List_of_largest_Internet_companies

Amazon 亚马逊 近年对外宣布完全去掉 Oracle RDBMS
Google 谷歌 有用 ==> 根据报道 Google 之前一直在使用 Oracle 财务软件等企业管理软件(2021-04-06 Google 与 Oracle 的诉讼后有报道准备迁移到 SAP),那么应当配套使用了 Oracle RDBMS
京东 有用,且用了 Oracle Exadata 一体机
Facebook 脸书 使用,且用了 Oracle Exadata 一体机
alibaba 阿里巴巴 早年宣布完全去掉 Oracle RDBMS,但似乎前几年还在用 peoplesoft
tencent 腾讯 有用,似乎有过一套 8 节点 RAC
苏宁 suning.com 不清楚,似乎主要用 ibm 的技术
tesla 特斯拉 有用,和 oracle 关系不错
netflix 重度使用,且用了 Oracle Exadata 一体机
字节跳动 bytedance 不清楚 ,似乎完全没用
paypal 重度使用,且用了 Oracle Exadata 一体机
SalesForce 重度使用
百度 baidu 有少量使用,有多台 Exadata
booking.com 有用
uber 有用
美团点评 有少量使用
Expedia 有用
Rakuten 乐天 重度使用,且用了 Oracle Exadata 一体机
Adobe 有用
Ebay 重度使用,且用了 Oracle Exadata 一体机
2021-04-29 17:18:06 +08:00
回复了 mygreens 创建的主题 数据库 Oracle 相比 mysql 的优势在哪里
oracle 的优化器 CBO optimizer 目前应该是所有 RDBMS 里最复杂的(不说是最先进的)。MYSQL 至少在优化器上还处于比较初级的阶段,虽然 MySQL 的目标可能并不希望实现非常复杂的优化器算法。

举一个例子, 都不使用索引的情况下,NO INDEX ! NO INDEX | NO INDEX !

以下数据量是一样的,机器是同一台。 Oracle 11.2.0.4 MySQL 8.0.14

都没有索引的情况下:oracle 使用 0.04 秒, MySQL 等了 10 分钟也没运行完

对于简单的 SQL 而言,差别不会有那么大。对于复杂的 SQL 而言, 能明显体现出优化器的优势。

对于拔高某个技术,没有兴趣。 所以 MYSQL 死忠请勿拍。


Oracle :

SQL> set timing on;
SQL> SELECT c.cust_city,
2 t.calendar_quarter_desc,
3 SUM(s.amount_sold) sales_amount
4 FROM sh.sales s, sh.times t, sh.customers c, sh.channels ch
5 WHERE s.time_id = t.time_id
6 AND s.cust_id = c.cust_id
7 AND s.channel_id = ch.channel_id
8 AND c.cust_state_province = 'FL'
9 AND ch.channel_desc = 'Direct Sales'
10 AND t.calendar_quarter_desc IN ('2000-01', '2000-02','1999-12')
11 GROUP BY c.cust_city, t.calendar_quarter_desc;

CUST_CITY CALENDA SALES_AMOUNT
------------------------------ ------- ------------
Cypress Gardens 2000-01 3545.82
Candler 2000-01 4166.32
Sanibel 2000-02 17908.67
Ocala 2000-02 7081.73
Molino 2000-01 18765.25
Ocala 2000-01 7146.73
Palmdale 2000-02 25829.24
Palmdale 2000-01 37793.44
Molino 2000-02 17144.7
Saint Marks 2000-01 55781.37
Noma 2000-01 33572.55
Evinston 2000-02 62657.21
Candler 2000-02 6493.94
Winter Springs 2000-02 20
Sugarloaf Key 2000-01 12027.66
Saint Marks 2000-02 48858.7
Blountstown 2000-02 38052.58
Sugarloaf Key 2000-02 9659.44
Cypress Gardens 2000-02 4928.93
Evinston 2000-01 53509.69
Blountstown 2000-01 27024.7
Sanibel 2000-01 15870.34
Winter Springs 2000-01 31.46
Noma 2000-02 23903.58

已选择 24 行。

已用时间: 00: 00: 00.04

执行计划
----------------------------------------------------------
Plan hash value: 1865285285

------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop |
------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 607 | 46132 | 955 (2)| 00:00:12 | | |
| 1 | HASH GROUP BY | | 607 | 46132 | 955 (2)| 00:00:12 | | |
|* 2 | HASH JOIN | | 2337 | 173K| 954 (2)| 00:00:12 | | |
| 3 | PART JOIN FILTER CREATE | :BF0000 | 274 | 4384 | 18 (0)| 00:00:01 | | |
|* 4 | TABLE ACCESS FULL | TIMES | 274 | 4384 | 18 (0)| 00:00:01 | | |
|* 5 | HASH JOIN | | 12456 | 729K| 936 (2)| 00:00:12 | | |
| 6 | MERGE JOIN CARTESIAN | | 383 | 14937 | 408 (1)| 00:00:05 | | |
|* 7 | TABLE ACCESS FULL | CHANNELS | 1 | 13 | 3 (0)| 00:00:01 | | |
| 8 | BUFFER SORT | | 383 | 9958 | 405 (1)| 00:00:05 | | |
|* 9 | TABLE ACCESS FULL | CUSTOMERS | 383 | 9958 | 405 (1)| 00:00:05 | | |
| 10 | PARTITION RANGE JOIN-FILTER| | 918K| 18M| 526 (2)| 00:00:07 |:BF0000|:BF0000|
| 11 | TABLE ACCESS FULL | SALES | 918K| 18M| 526 (2)| 00:00:07 |:BF0000|:BF0000|
------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

2 - access("S"."TIME_ID"="T"."TIME_ID")
4 - filter("T"."CALENDAR_QUARTER_DESC"='1999-12' OR "T"."CALENDAR_QUARTER_DESC"='2000-01' OR
"T"."CALENDAR_QUARTER_DESC"='2000-02')
5 - access("S"."CUST_ID"="C"."CUST_ID" AND "S"."CHANNEL_ID"="CH"."CHANNEL_ID")
7 - filter("CH"."CHANNEL_DESC"='Direct Sales')
9 - filter("C"."CUST_STATE_PROVINCE"='FL')


统计信息
----------------------------------------------------------
0 recursive calls
0 db block gets
1726 consistent gets
0 physical reads
0 redo size
1495 bytes sent via SQL*Net to client
531 bytes received via SQL*Net from client
3 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
24 rows processed


SQL> select count(*) from sh.sales;

COUNT(*)
----------
918843

SQL> select * From v$VERSION;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE 11.2.0.4.0 Production
TNS for 64-bit Windows: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production

MySQL :

mysql> SELECT c.cust_city,
-> t.calendar_quarter_desc,
-> SUM(s.amount_sold) sales_amount
-> FROM sh.sales s, sh.times t, sh.customers c, sh.channels ch
-> WHERE s.time_id = t.time_id
-> AND s.cust_id = c.cust_id
-> AND s.channel_id = ch.channel_id
-> AND c.cust_state_province = 'FL'
-> AND ch.channel_desc = 'Direct Sales'
-> AND t.calendar_quarter_desc IN ('2000-01', '2000-02','1999-12')
-> GROUP BY c.cust_city, t.calendar_quarter_desc;


+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+----------------------------------------------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+----------------------------------------------------+
| 1 | SIMPLE | ch | NULL | ALL | NULL | NULL | NULL | NULL | 5 | 20.00 | Using where; Using temporary |
| 1 | SIMPLE | t | NULL | ALL | NULL | NULL | NULL | NULL | 1804 | 30.00 | Using where; Using join buffer (Block Nested Loop) |
| 1 | SIMPLE | c | NULL | ALL | NULL | NULL | NULL | NULL | 55065 | 10.00 | Using where; Using join buffer (Block Nested Loop) |
| 1 | SIMPLE | s | NULL | ALL | NULL | NULL | NULL | NULL | 914584 | 0.10 | Using where; Using join buffer (Block Nested Loop) |
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+----------------------------------------------------+



mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.14 |
+-----------+
1 row in set (0.00 sec)

mysql> select count(*) from sh.sales;
+----------+
| count(*) |
+----------+
| 918843 |
+----------+
1 row in set (0.96 sec)
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5960 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 12ms · UTC 03:30 · PVG 11:30 · LAX 19:30 · JFK 22:30
Developed with CodeLauncher
♥ Do have faith in what you're doing.