繁体   English   中英

MySQL View查询优化

[英]MySQL View Query optimization

考虑具有以下结构的表。

CREATE TABLE `marks` (
      `id` int(11) NOT NULL,
      `name` varchar(50) NOT NULL,
      `subject` varchar(50) NOT NULL,
      `marks` int(5) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

样本数据可以考虑如下:

INSERT INTO `marks` (`id`, `name`, `subject`, `marks`) VALUES
(1, 'A', 's1', 50),
(2, 'A', 's2', 22),
(3, 'A', 's3', 33),
(4, 'A', 's4', 11),
(5, 'B', 's1', 32),
(6, 'B', 's2', 34),
(7, 'B', 's3', 56),
(8, 'B', 's4', 44),
(9, 'C', 's1', 32),
(10, 'C', 's2', 21),
(11, 'C', 's3', 65),
(12, 'C', 's4', 78);

现在考虑选择一个名为“ A”的学生的总成绩的问题。

select `marks`.`name` AS `name`,sum(`marks`.`marks`) AS `total_marks` 
from `marks`
WHERE `marks`.`name`='A'
group by `marks`.`name`;

一种替代方法可能正在使用视图

CREATE VIEW `totals`  AS  
select `marks`.`name` AS `name`,sum(`marks`.`marks`) AS `total_marks` 
from `marks` 
group by `marks`.`name` ;

然后使用

select * from `total` where `total`.`name`='A'

另一种方法也可以使用嵌套查询

select * 
from 
(select `marks`.`name` AS `name`,sum(`marks`.`marks`) AS `total_marks` 
from `marks` 
group by `marks`.`name`) `total` where `total`.`name`='A'

问题 :如果数据集相似且更大且计算密集型数据集,计算速度将如何变化?

在Xampp上使用 :Php,MySQL

您想在标记开头创建索引,因为您正在对其进行过滤和分组。

CREATE INDEX marks_name ON marks (name);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM