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

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

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