关于mysql优化的底层原理,现在能找到的都是只言片语的介绍,求推荐能系统介绍mysql底层原理的书籍或文章,谢谢。
举个例子,说明下想学习的内容:
如下数据表,id,品牌name,品牌分类id
+–+–+–+
| id | name | cid |
+–+–+–+
| 1 | sumsang | 1 |
| 2 | apple | 1 |
| 3 | thinkpad | 1 |
| 4 | huawei | 2 |
| 5 | xiaomi | 2 |
+–+–+–+
创建数据表代码:
CREATE TABLE `product` (
`id` int(11) NOT NULL,
`name` char(20) NOT NULL,
`cid` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
—
— Dumping data for table `product`
—
INSERT INTO `product` (`id`, `name`, `cid`) VALUES
(1, “sumsang”, 1),
(2, “apple”, 1),
(3, “thinkpad”, 1),
(4, “huawei”, 2),
(5, “xiaomi”, 2);
要得到id,品牌name,品牌分类id,及该品牌分类id下的品牌name数量,如下格式:
+–+–+–+–+
| id | name | cid | cidcount |
+–+–+–+–+
| 1 | sumsang | 1 | 3 |
| 2 | apple | 1 | 3 |
| 3 | thinkpad | 1 | 3 |
| 4 | huawei | 2 | 2 |
| 5 | xiaomi | 2 | 2 |
+–+–+–+–+
那么有两个方式实现:
(1)SELECT id,name,cid,(select count(id) from product where cid=p.cid) cidcount from product p
查询时间0.0003秒
(2)SELECT id,name,c.cid,cidcount from product inner join(select cid,count(id) cidcount from product group by cid ) c on c.cid=product.cid
查询时间0.0005秒
想学习的问题:第一种实现方式为什么比第二种快,mysql底层是怎么样处理的,有没有系统介绍的书籍,而不是遇到某个问题了,只能找到些只言片语的介绍。
举个例子,说明下想学习的内容:
如下数据表,id,品牌name,品牌分类id
+–+–+–+
| id | name | cid |
+–+–+–+
| 1 | sumsang | 1 |
| 2 | apple | 1 |
| 3 | thinkpad | 1 |
| 4 | huawei | 2 |
| 5 | xiaomi | 2 |
+–+–+–+
创建数据表代码:
CREATE TABLE `product` (
`id` int(11) NOT NULL,
`name` char(20) NOT NULL,
`cid` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
—
— Dumping data for table `product`
—
INSERT INTO `product` (`id`, `name`, `cid`) VALUES
(1, “sumsang”, 1),
(2, “apple”, 1),
(3, “thinkpad”, 1),
(4, “huawei”, 2),
(5, “xiaomi”, 2);
要得到id,品牌name,品牌分类id,及该品牌分类id下的品牌name数量,如下格式:
+–+–+–+–+
| id | name | cid | cidcount |
+–+–+–+–+
| 1 | sumsang | 1 | 3 |
| 2 | apple | 1 | 3 |
| 3 | thinkpad | 1 | 3 |
| 4 | huawei | 2 | 2 |
| 5 | xiaomi | 2 | 2 |
+–+–+–+–+
那么有两个方式实现:
(1)SELECT id,name,cid,(select count(id) from product where cid=p.cid) cidcount from product p
查询时间0.0003秒
(2)SELECT id,name,c.cid,cidcount from product inner join(select cid,count(id) cidcount from product group by cid ) c on c.cid=product.cid
查询时间0.0005秒
想学习的问题:第一种实现方式为什么比第二种快,mysql底层是怎么样处理的,有没有系统介绍的书籍,而不是遇到某个问题了,只能找到些只言片语的介绍。
解决方案
20
关于非常深入的MYSQL书籍不一定能找到题主需要的。
一般是两种资料可以使人达到MYSQL的极致水平。
一、大学的教材 《数据库系统概论(第四版)》 王珊 萨师煊 高等教育出版社 (这本书应该可以解释题主提出的具体问题,索引的使用,执行计划的制定和执行)
二、MYSQL源代码,这个可以分析具体的某个实现。
一般是两种资料可以使人达到MYSQL的极致水平。
一、大学的教材 《数据库系统概论(第四版)》 王珊 萨师煊 高等教育出版社 (这本书应该可以解释题主提出的具体问题,索引的使用,执行计划的制定和执行)
二、MYSQL源代码,这个可以分析具体的某个实现。
10
你可以看看 高性能mysql ,好像现在是第3版,这本书主讲 性能优化,你可以好好看看,内容丰富。
另外,你上面的例子,一般要分析哪个sql更快,可以看执行计划,不过上面的2中写法,也并不总是第一个方式就一定快。
另外,你上面的例子,一般要分析哪个sql更快,可以看执行计划,不过上面的2中写法,也并不总是第一个方式就一定快。
10
了解mysql底层设计,看下高性能mysql介绍