MySQL 中小型查找表的优化引擎
-
26-09-2020 - |
题
我有以下问题:我正在设计带有几十个小型查找表的 Web 应用程序:这些表通常包含三列(ID、名称、描述)和几行(大多少于 50 行,最多约为 450 行)。
这些查找表预计只会很少更改(它们来自标准,几年更改一次),并且仅用于:
- 在 html select 中填写选项
- 与报告中的其他记录合并
只会有 SELECT
这些表上的语句 99% 的次数,但数量会相当多。
我想知道,哪种数据库引擎使用起来最有效?
以下是我的考虑:
记忆
- 亲:非常快
- 缺点:如果服务器崩溃,所有数据都会丢失并且需要重新创建
- 缺点:不支持外键
压缩MyISAM
- 亲:快速地
- 缺点:不支持外键
数据库
- 亲:外键支持
我想问的是,使用不同的东西是否会有显着的优势 数据库 - 性能方面
谢谢,兹宾内克
解决方案
我在2011年8月回答过类似的问题: 哪种 DBMS 适合超快速读取和简单的数据结构?
既然你问的是MySQL以及哪个存储引擎。老实说,这很难说,因为在 SELECT 方面,MyISAM 很少能胜过 InnoDB。
这是我过去关于这一争议的一些帖子
Sep 20, 2011
: MyISAM 和 InnoDB 的优点May 03, 2012
: InnoDB 和 MyISAM 哪个更快?Jul 05, 2012
: InnoDB 与具有多个索引的 MyISAMSep 26, 2012
: 为这些项目需求选择 MyISAM 而不是 InnoDB;和长期选择
您现在可能会问:为什么我会更喜欢 MyISAM 而不是 InnoDB?
看看这个图表(由 Percona 首席技术官 Vadim Tkachenko 创建)
MyISAM 将缓存索引,并且您的表将有 2 个索引(id 上的主键和 Name 索引)。另一方面,InnoDB 有太多的移动部件需要容纳,特别是当 InnoDB 缓冲池必须定期加载和释放 16K 页时。
公平地说,你应该做一个实验。
- 转到我的帖子 InnoDB 和 MyISAM 之间的主要区别是什么?. 。仔细阅读。
- 使用 MyISAM 设置服务器并使用以下命令设置所有表
ROW_FORMAT=Fixed
(见我的帖子 在固定大小字段上使用 CHAR 与 VARCHAR 对性能有何影响?)并使用大 键缓冲区大小. - 使用 InnoDB 和大型数据库设置另一台服务器 innodb_buffer_pool_size.
- 将您的数据添加到两台服务器并疯狂地查询它们。
这将为您的数据集的存储引擎选择提供最佳评估。
试一试 !!!
其他提示
- “压缩的 MyISAM”——那是什么?也许“存档”?
- 不需要压缩;表太小,很快就会被完全缓存。
FOREIGN KEYS
- 为什么?您已经调试了代码,不是吗?不会有任何悬挂的东西需要检查。MEMORY
并非没有道理, 如果 您编写“重新加载”代码,每当您启动服务器时都会执行该代码,并且对表的任何更新都会写入到MEMORY
表和持久备份。MyISAM
ROW_FORMAT=FIXED
——那是老太太的故事;使用DYNAMIC
和VARCHARs
.- InnoDB的“集群”
PRIMARY KEY
出于您的目的,查找速度比 MyISAM 快一些。 - 你 知道 查找表导致速度明显减慢?我严重怀疑他们是这样的。
- 做 不是 使用查找表来查找“连续”值,例如
FLOATs
和DATEs
.
我投票支持没有 FK 的 InnoDB。
不隶属于 dba.stackexchange