讨论一下 mysql 和 postgresql

2017-12-29 15:25:39 +08:00
 flyingfz

前段时间有个需求:在 MySQL 数据库里, 查找某个分类(包含其子分类 )产品 ,按照 创建时间倒序,分页取 20 条, 写出了类似这样的 sql:

select p.* from 
product P 
	inner join 
	( 
		select 
			c.category_id 
		from 
			category c 
		join 
			category c2 
		on 
			c.parent_category_id = c2.category_id
		join 
			category c3  
		on 
			c2.parent_category_id = c3.category_id
		where 
			c.category_id  = @category_id or 
			c2.category_id = @category_id or 
			c3.category_id = @category_id 
	)  as C 
on 
P.category_id = C.category_id 
order by P.create_time desc
limit 20	

product 表,product_id(char(40)) 是主键,数据量,在 20k 左右,在 category_id(char(40)) 列,已经创建了 索引, category 表,category_id(char(40)) 是主键,总共只有 200 多条,

就这么个语句,MySQL 在我的开发机器上,执行了 16 到 25 秒 左右。

果断换 postgresql,每个表只有主键,未加其他索引 , 同样的数据量,同样的 sql 语句, 执行 30 到 40 毫秒 。

差异太明显了,所以,这个项目的 数据库改为 postgresql 了。

关于 mysql 和 postgresql ,以及上述的 sql 语句, 大家有什么想说的?

6141 次点击
所在节点    程序员
26 条回复
ziding
2017-12-30 16:31:12 +08:00
mysql 更像一个存储引擎,pg 更像企业级的数据库,没有更好,就看那个更适合而已。
shyling
2017-12-30 19:45:57 +08:00
explain 啊。explain extended 啊,explain analyze 啊。。
likuku
2017-12-30 20:00:43 +08:00
@flyingfz mysql 只是先入为主在互联网大潮时期恰巧搭上 LAMP 的顺风车从而大面积推广,然后高企的市场占有又刺激继续推广...

和当初提到 Linux 就以为世界只有 红帽子 类似...

虽然好多年前 mysql 用户还在为各种多字节语言编码头疼的时候,PG 早已实现 Unicode,所有语言通吃;

mysql 对 SQL 国际标准都迟迟支持不全,最近几年不知是否完善;

若没有 InnoDB 的加持,mysql 恐怕如今还是受限于不支持事务+只有表锁的 myisam。

前些天也在另一个讨论 mysql 慢的贴里回复,提到自己以前在同一台机器上对比测试过百万行的表的基础查询,
PG 比 MySQL-InnoDB 快 7-8 倍。
zjp
2017-12-30 21:42:23 +08:00
@likuku MySQL8 终于把 utf8mb4 设为默认字符集了,虽然说最后用的时候还是得稳妥起见,手动指定字符集…
msg7086
2017-12-31 09:11:31 +08:00
没啥太多好说的吧。
业务逻辑要是都用 SQL 写,那直接上 Oracle 就好了。
幸好我们业务逻辑是用代码写的。
realpg
2018-01-02 09:48:03 +08:00
@msg7086 #25
+10086
又想起了当年面试的奇葩 让 PHP 实现个小功能,有效利用数据库 给我写了个 4KB 文字的 SQL 解决问题……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/418619

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX