前段时间有个需求:在 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 语句, 大家有什么想说的?
