MySQL内存表的弊端

MySQL内存表使我们经常会用到的,但是 MySQL内存表的也不是提高读性能的***工具,在有些情况下,MySQL内存表可能会比其实表类型的B-TREE更慢。

  1. CREATE TABLE `mem_test` (                                                               
  2.             `id` int(10) unsigned NOT NULL DEFAULT '0',                                           
  3.             `name` varchar(10) DEFAULT NULL,                                                      
  4.             `first` varchar(10) DEFAULT NULL,                                                     
  5.             PRIMARY KEY (`id`),                                                                   
  6.             KEY `NewIndex1` (`name`,`first`)                                                      
  7.           ) ENGINE=MEMORY ;  
  8.  
  9. CREATE TABLE `innodb_test` (                     
  10.                `id` int(10) unsigned NOT NULL DEFAULT '0',   
  11.                `name` varchar(10) DEFAULT NULL,               
  12.                `first` varchar(10) DEFAULT NULL,              
  13.                PRIMARY KEY (`id`),                            
  14.                KEY `NewIndex1` (`name`,`first`)               
  15.              ) ENGINE=InnoDB;  
  16.  

如:
1:在= 或者<=> 情况下,飞快,但是在如< 或>情况下,他是不使用索引

  1. mysql--root@localhost:17db 07:33:45>>explain select * from mem_test where id>3;  
  2. +----+-------------+----------+------+---------------+------+---------+------+------+-------------+  
  3. | id | select_type | table    | type | possible_keys | key | key_len | ref | rows | Extra       |  
  4. +----+-------------+----------+------+---------------+------+---------+------+------+-------------+  
  5. | 1 | SIMPLE      | mem_test | ALL | PRIMARY       | NULL | NULL    | NULL |   15 | Using where |  
  6. +----+-------------+----------+------+---------------+------+---------+------+------+-------------+  
  7. 1 row in set (0.00 sec)  
  8.  
  9. mysql--root@localhost:17db 07:33:49>>explain select * from innodb_test where id>3;  
  10. +----+-------------+-------------+-------+---------------+---------+---------+------+------+-------------+  
  11. | id | select_type | table       | type | possible_keys | key     | key_len | ref | rows | Extra       |  
  12. +----+-------------+-------------+-------+---------------+---------+---------+------+------+-------------+  
  13. | 1 | SIMPLE      | innodb_test | range | PRIMARY       | PRIMARY | 4       | NULL |    7 | Using where |  
  14. +----+-------------+-------------+-------+---------------+---------+---------+------+------+-------------+  
  15. 1 row in set (0.00 sec)  
  16.  

2:不能用在order by情况下来提高速度

  1. mysql--root@localhost:17db 07:33:55>>explain select * from innodb_test order by id;  
  2. +----+-------------+-------------+-------+---------------+---------+---------+------+------+-------+  
  3. | id | select_type | table       | type | possible_keys | key     | key_len | ref | rows | Extra |  
  4. +----+-------------+-------------+-------+---------------+---------+---------+------+------+-------+  
  5. | 1 | SIMPLE      | innodb_test | index | NULL          | PRIMARY | 4       | NULL |   15 |       |  
  6. +----+-------------+-------------+-------+---------------+---------+---------+------+------+-------+  
  7. 1 row in set (0.00 sec)  
  8.  
  9. mysql--root@localhost:17db 07:34:27>>explain select * from mem_test order by id;  
  10. +----+-------------+----------+------+---------------+------+---------+------+------+----------------+  
  11. | id | select_type | table    | type | possible_keys | key | key_len | ref | rows | Extra          |  
  12. +----+-------------+----------+------+---------------+------+---------+------+------+----------------+  
  13. | 1 | SIMPLE      | mem_test | ALL | NULL          | NULL | NULL    | NULL |   15 | Using filesort |  
  14. +----+-------------+----------+------+---------------+------+---------+------+------+----------------+  
  15. 1 row in set (0.00 sec)  
  16.  

3:不能确定俩值之间有多少行

  1. mysql--root@localhost:17db 07:37:14>>explain select count(1) from mem_test where id>3 and id<6;  
  2. +----+-------------+----------+------+---------------+------+---------+------+------+-------------+  
  3. | id | select_type | table    | type | possible_keys | key | key_len | ref | rows | Extra       |  
  4. +----+-------------+----------+------+---------------+------+---------+------+------+-------------+  
  5. | 1 | SIMPLE      | mem_test | ALL | PRIMARY       | NULL | NULL    | NULL |   20 | Using where |  
  6. +----+-------------+----------+------+---------------+------+---------+------+------+-------------+  
  7. 1 row in set (0.00 sec)  
  8.  
  9. mysql--root@localhost:17db 07:40:35>>explain select count(1) from innodb_test where id>3 and id<6;  
  10. +----+-------------+-------------+-------+---------------+---------+---------+------+------+--------------------------+  
  11. | id | select_type | table       | type | possible_keys | key     | key_len | ref | rows | Extra                    |  
  12. +----+-------------+-------------+-------+---------------+---------+---------+------+------+--------------------------+  
  13. | 1 | SIMPLE      | innodb_test | range | PRIMARY       | PRIMARY | 4       | NULL |    1 | Using where; Using index |  
  14. +----+-------------+-------------+-------+---------------+---------+---------+------+------+--------------------------+  
  15. 1 row in set (0.00 sec)  
  16.  

4:在多列索引的情况下,只有全部指定才能利用hash扫描,而B-tree确可以利用索引的最左端来查找

  1. mysql--root@localhost:17db 07:37:07>>explain select * from innodb_test where name='b';  
  2. +----+-------------+-------------+------+---------------+-----------+---------+-------+------+--------------------------+  
  3. | id | select_type | table       | type | possible_keys | key       | key_len | ref   | rows | Extra                    |  
  4. +----+-------------+-------------+------+---------------+-----------+---------+-------+------+--------------------------+  
  5. | 1 | SIMPLE      | innodb_test | ref | NewIndex1     | NewIndex1 | 33      | const |    8 | Using where; Using index |  
  6. +----+-------------+-------------+------+---------------+-----------+---------+-------+------+--------------------------+  
  7. 1 row in set (0.00 sec)  
  8.  
  9. mysql--root@localhost:17db 07:37:10>>explain select * from mem_test where name='b';  
  10. +----+-------------+----------+------+---------------+------+---------+------+------+-------------+  
  11. | id | select_type | table    | type | possible_keys | key | key_len | ref | rows | Extra       |  
  12. +----+-------------+----------+------+---------------+------+---------+------+------+-------------+  
  13. | 1 | SIMPLE      | mem_test | ALL | NewIndex1     | NULL | NULL    | NULL |   20 | Using where |  
  14. +----+-------------+----------+------+---------------+------+---------+------+------+-------------+  
  15.  

当然内存表也可以手动添加btree

  1. CREATE INDEX BTREE_index USING BTREE on mem_test(name,first)  
  2. mysql--root@localhost:17db 03:36:41>>explain select * from mem_test where name='b';  
  3. +----+-------------+----------+------+-----------------------+-------------+---------+-------+------+-------------+  
  4. | id | select_type | table    | type | possible_keys         | key         | key_len | ref   | rows | Extra       |  
  5. +----+-------------+----------+------+-----------------------+-------------+---------+-------+------+-------------+  
  6. | 1 | SIMPLE      | mem_test | ref | NewIndex1,BTREE_index | BTREE_index | 33      | const |    9 | Using where |  
  7. +----+-------------+----------+------+-----------------------+-------------+---------+-------+------+-------------+  
  8. 1 row in set (0.00 sec)  

哈哈,它也用到索引了。
所以要选择合适的存储引擎至关重要。
 

 

 

【编辑推荐】

MySQL独立表空间的优缺点

mysql数据库大小写的问题讨论

MySQL MyISAM表结构的恢复

MySQL InnoDB表结构的恢复

深度解析MySQL创建关联表

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/309018.html<

(0)
管理的头像管理
上一篇2025-05-27 20:44
下一篇 2025-05-27 20:45

相关推荐

  • 高io数据库可以干什么用?高io数据库适合什么场景

    高IO数据库的核心价值在于通过极高的读写吞吐量,解决海量数据场景下的性能瓶颈,是支撑高并发交易、实时分析及大规模内容分发的关键基础设施,在数字化转型的深水区,数据不再仅仅是静态的记录,而是流动的资产,传统的机械硬盘或普通SSD早已无法满足现代应用对速度的极致追求,高IO(Input/Output)数据库,就是那……

    2026-06-18
    0
  • 高io服务器性能如何?高io服务器适合什么场景

    高IO服务器并非单纯指代某种硬件,而是指在随机读写、高并发连接及小文件处理场景下,具备极致IOPS(每秒输入输出操作次数)和低延迟特性的计算资源,它是支撑现代高并发应用稳定运行的核心基石,在2026年的数字化浪潮中,业务负载早已从简单的静态页面展示演变为复杂的实时数据处理,许多开发者在排查系统瓶颈时,往往忽略了……

    2026-06-18
    0
  • 隔离网络空间哪里便宜?国内隔离网络空间价格

    隔离网络空间并没有统一的“便宜”标准,其成本高度取决于物理隔离等级、带宽需求及安全合规要求,通常物理网闸方案初期投入较高但长期运维成本低,而逻辑隔离方案虽初期便宜但存在潜在安全风险,建议根据业务敏感度选择混合隔离架构以平衡成本与安全,在数字化时代,企业构建独立网络环境的需求日益增长,但“隔离网络空间哪里便宜”这……

    2026-06-18
    0
  • 骨干网络体系结构设备为何故障?常见原因有哪些

    骨干网络体系结构设备故障的核心原因通常归结为硬件老化、配置错误、物理链路中断及外部攻击四大类,其中电源模块失效与光模块性能衰减是占比最高的隐性故障源,骨干网作为数字经济的“大动脉”,其稳定性直接关乎国计民生,当核心路由器或交换机出现丢包、震荡甚至宕机时,运维人员往往面临巨大的压力,很多人第一反应是检查软件配置……

    2026-06-18
    0
  • 高主频ecs服务器怎么迁移?ecs服务器迁移数据丢失怎么办

    高主频ECS服务器迁移的核心在于采用“停机快照+镜像创建”或“在线热迁移”方案,前者数据一致性最高且操作最稳妥,后者对业务连续性要求极高但技术门槛较大,在云计算领域,高主频实例通常用于处理高频交易、实时计算或大型游戏服务器等对CPU算力极度敏感的场景,这类业务一旦中断,损失往往是分钟级甚至秒级的,迁移不仅仅是数……

    2026-06-18
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注