我有以下问题:我正在设计带有几十个小型查找表的 Web 应用程序:这些表通常包含三列(ID、名称、描述)和几行(大多数少于 50,最大约为 450)。
这些查找表预计很少更改(它们来自标准,几年更改一次)并且仅用于:
SELECT
99% 的情况下,这些表上只会有语句,但会有相当多的语句。
我想知道,使用哪种数据库引擎最有效?
以下是我的考虑:
记忆
- 亲:非常快
- con:如果服务器崩溃,所有数据都丢失,需要重新创建
- con:不支持外键
压缩的 MyISAM
- 亲:快
- con:不支持外键
数据库
- 亲:外键支持
我想问的是,使用与InnoDB不同的东西是否会有显着的优势- 性能方面
谢谢,兹比内克
我有一个具有以下结构的表:
CREATE TABLE `Rings` (
ID_RingType CHAR(2),
Number MEDIUMINT UNSIGNED,
ID_User INT(11)
);
Run Code Online (Sandbox Code Playgroud)
和数据:
INSERT INTO `Rings` VALUES
('AA',1,1),
('AA',2,1),
('AA',3,1),
('AA',11,1),
('AA',12,1),
('AA',13,1),
('AA',14,1),
('AA',15,1),
('AB',16,1),
('AB',17,1),
('AB',18,1),
('AB',19,1),
('AB',20,2),
('AB',21,2),
('AB',22,2);
Run Code Online (Sandbox Code Playgroud)
我想组基于所述数据ID_User
和ID_RingType
和用于数字的每个连续范围列出MIN和MAX。
结果应如下所示:
ID_User | ID_RingType | MIN | MAX
1 | 'AA' | 1 | 3
1 | 'AA' | 11 | 15
1 | 'AB' | 16 | 19
2 | 'AB' | 20 | 22
Run Code Online (Sandbox Code Playgroud)
我浏览了关于这个主题的几篇文章,但无法调整它们以适合我的数据。
任何帮助,将不胜感激。
我正在使用存储过程生成由给定范围内的前缀和数字组成的序列(等序列“AB100”、“AB101”、...、“AB199”、“AB200”)
存储过程包括REPEAT
循环,其中构造字符串并插入表中。
当所有循环都在事务内时,程序运行得非常快,但是当我在没有事务的情况下插入数据时,运行该程序的时间要长 400 倍。
谁能解释一下,为什么会这样?
或者,如果有人更好地了解如何生成这样的序列,我会很高兴听到他们的声音。
这是代码:
-- create table
CREATE TABLE seq
(
Code CHAR(12)
) ENGINE = INNODB;
-- fast procedure with transactions
DELIMITER $$
CREATE PROCEDURE sp_sequence(IN val_prefix CHAR(2), IN val_from INT, IN val_to INT )
BEGIN
START TRANSACTION;
SET @val = val_from;
REPEAT
INSERT INTO seq (Code) VALUES (CONCAT(val_prefix, @val));
SET @val = @val + 1;
UNTIL @val > val_to END REPEAT;
COMMIT;
END$$
DELIMITER ;
-- slow procedure without transactions
DROP PROCEDURE …
Run Code Online (Sandbox Code Playgroud)