MySQL查看查询优化

时间:2018-01-01 23:38:29

标签: php mysql

考虑一个具有以下结构的表。

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

1 个答案:

答案 0 :(得分:0)

您希望在标记上创建一个索引,因为您正在对其进行过滤和分组。

CREATE INDEX marks_name ON marks (name);
相关问题