我有一个名为 test 的表:
create table demo (name varchar(10), mark1 int, mark2 int);
我多次需要每一行的 mark1 和 mark2 的总数。
select name, (mark1 + mark2) as total from demo;
我被告知效率不高。我不允许在表中添加新的总计列。
我可以在索引中存储这样的业务逻辑吗?
我创建了一个视图
CREATE VIEW view_total AS SELECT name, (mark1 + mark2) as 'total' from demo;
我用以下内容填充了演示表:
DELIMITER $$
CREATE PROCEDURE InsertRand(IN NumRows INT)
BEGIN
DECLARE i INT;
SET i = 1;
START TRANSACTION;
WHILE i <= NumRows DO
INSERT INTO demo VALUES (i,i+1,i+2);
SET i = i + 1;
END WHILE;
COMMIT;
END$$
DELIMITER ;
CALL InsertRand(100000);
的执行时间
select * from view_total;
和
select * from demo;
相同,10毫秒。所以我没有获得任何见地的好处。我试图在视图上创建索引:
create index demo_total_view on view_total (name, total);
失败并出现错误:
ERROR 1347 (HY000): 'test.view_total' is not BASE TABLE
关于如何防止总计列的冗余操作的任何指针?