`
meiowei
  • 浏览: 147114 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

mysql内存表弊端

阅读更多
<script src="http://v2.jiathis.com/code/jia.js" type="text/javascript"></script><!-- JiaThis Button END -->

内存表的也不是提高读性能的万能工具,在有些情况下,可能会比其实表类型的B-TREE更慢
CREATE TABLE `mem_test` (                                                            
            `id` int(10) unsigned NOT NULL DEFAULT '0',                                         
            `name` varchar(10) DEFAULT NULL,                                                   
            `first` varchar(10) DEFAULT NULL,                                                   
            PRIMARY KEY (`id`),                                                                 
            KEY `NewIndex1` (`name`,`first`)                                                   
          ) ENGINE=MEMORY ;

CREATE TABLE `innodb_test` (                  
               `id` int(10) unsigned NOT NULL DEFAULT '0',
               `name` varchar(10) DEFAULT NULL,            
               `first` varchar(10) DEFAULT NULL,            
               PRIMARY KEY (`id`),                          
               KEY `NewIndex1` (`name`,`first`)            
             ) ENGINE=InnoDB;

如:
1:在= 或者<=> 情况下,飞快,但是在如< 或>情况下,他是不使用索引
mysql--root@localhost:17db 07:33:45>>explain select * from mem_test where id>3;
+----+-------------+----------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table    | type | possible_keys | key | key_len | ref | rows | Extra       |
+----+-------------+----------+------+---------------+------+---------+------+------+-------------+
| 1 | SIMPLE      | mem_test | ALL | PRIMARY       | NULL | NULL    | NULL |   15 | Using where |
+----+-------------+----------+------+---------------+------+---------+------+------+-------------+
1 row in set (0.00 sec)

mysql--root@localhost:17db 07:33:49>>explain select * from innodb_test where id>3;
+----+-------------+-------------+-------+---------------+---------+---------+------+------+-------------+
| id | select_type | table       | type | possible_keys | key     | key_len | ref | rows | Extra       |
+----+-------------+-------------+-------+---------------+---------+---------+------+------+-------------+
| 1 | SIMPLE      | innodb_test | range | PRIMARY       | PRIMARY | 4       | NULL |    7 | Using where |
+----+-------------+-------------+-------+---------------+---------+---------+------+------+-------------+
1 row in set (0.00 sec)

2:不能用在order by情况下来提高速度
mysql--root@localhost:17db 07:33:55>>explain select * from innodb_test order by id;
+----+-------------+-------------+-------+---------------+---------+---------+------+------+-------+
| id | select_type | table       | type | possible_keys | key     | key_len | ref | rows | Extra |
+----+-------------+-------------+-------+---------------+---------+---------+------+------+-------+
| 1 | SIMPLE      | innodb_test | index | NULL          | PRIMARY | 4       | NULL |   15 |       |
+----+-------------+-------------+-------+---------------+---------+---------+------+------+-------+
1 row in set (0.00 sec)

mysql--root@localhost:17db 07:34:27>>explain select * from mem_test order by id;
+----+-------------+----------+------+---------------+------+---------+------+------+----------------+
| id | select_type | table    | type | possible_keys | key | key_len | ref | rows | Extra          |
+----+-------------+----------+------+---------------+------+---------+------+------+----------------+
| 1 | SIMPLE      | mem_test | ALL | NULL          | NULL | NULL    | NULL |   15 | Using filesort |
+----+-------------+----------+------+---------------+------+---------+------+------+----------------+
1 row in set (0.00 sec)

3:不能确定俩值之间有多少行
mysql--root@localhost:17db 07:37:14>>explain select count(1) from mem_test where id>3 and id<6;
+----+-------------+----------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table    | type | possible_keys | key | key_len | ref | rows | Extra       |
+----+-------------+----------+------+---------------+------+---------+------+------+-------------+
| 1 | SIMPLE      | mem_test | ALL | PRIMARY       | NULL | NULL    | NULL |   20 | Using where |
+----+-------------+----------+------+---------------+------+---------+------+------+-------------+
1 row in set (0.00 sec)

mysql--root@localhost:17db 07:40:35>>explain select count(1) from innodb_test where id>3 and id<6;
+----+-------------+-------------+-------+---------------+---------+---------+------+------+--------------------------+
| id | select_type | table       | type | possible_keys | key     | key_len | ref | rows | Extra                    |
+----+-------------+-------------+-------+---------------+---------+---------+------+------+--------------------------+
| 1 | SIMPLE      | innodb_test | range | PRIMARY       | PRIMARY | 4       | NULL |    1 | Using where; Using index |
+----+-------------+-------------+-------+---------------+---------+---------+------+------+--------------------------+
1 row in set (0.00 sec)

4:在多列索引的情况下,只有全部指定才能利用hash扫描,而B-tree确可以利用索引的最左端来查找
mysql--root@localhost:17db 07:37:07>>explain select * from innodb_test where name='b';
+----+-------------+-------------+------+---------------+-----------+---------+-------+------+--------------------------+
| id | select_type | table       | type | possible_keys | key       | key_len | ref   | rows | Extra                    |
+----+-------------+-------------+------+---------------+-----------+---------+-------+------+--------------------------+
| 1 | SIMPLE      | innodb_test | ref | NewIndex1     | NewIndex1 | 33      | const |    8 | Using where; Using index |
+----+-------------+-------------+------+---------------+-----------+---------+-------+------+--------------------------+
1 row in set (0.00 sec)

mysql--root@localhost:17db 07:37:10>>explain select * from mem_test where name='b';
+----+-------------+----------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table    | type | possible_keys | key | key_len | ref | rows | Extra       |
+----+-------------+----------+------+---------------+------+---------+------+------+-------------+
| 1 | SIMPLE      | mem_test | ALL | NewIndex1     | NULL | NULL    | NULL |   20 | Using where |
+----+-------------+----------+------+---------------+------+---------+------+------+-------------+
当然内存表也可以手动添加btree
CREATE INDEX BTREE_index USING BTREE on mem_test(name,first)
mysql--root@localhost:17db 03:36:41>>explain select * from mem_test where name='b';
+----+-------------+----------+------+-----------------------+-------------+---------+-------+------+-------------+
| id | select_type | table    | type | possible_keys         | key         | key_len | ref   | rows | Extra       |
+----+-------------+----------+------+-----------------------+-------------+---------+-------+------+-------------+
| 1 | SIMPLE      | mem_test | ref | NewIndex1,BTREE_index | BTREE_index | 33      | const |    9 | Using where |
+----+-------------+----------+------+-----------------------+-------------+---------+-------+------+-------------+
1 row in set (0.00 sec)
哈哈,它也用到索引了。
所以选择合适的存储引擎至关重要。
分享到:
评论

相关推荐

    Mysql临时表原理及创建方法解析

    然而,使用临时表也有一定的弊端,如前所述,如果会话意外中断,所有存储在临时表中的数据都将丢失。此外,如果临时表的使用频率过高,可能会占用大量的内存资源,影响服务器性能。 总之,MySQL临时表是一个强大的...

    MYSQL培训经典教程(共两部分) 1/2

    数据库优化 177 8.1 索引的使用 178 8.1.1索引对单个表查询的影响 178 8.1.2索引对多个表查询的影响 180 8.1.3多列索引对查询的影响 181 8.1.4索引的作用 182 8.1.5 索引的弊端 182 8.1.6 选择...

    MYSQL培训经典教程(共两部分) 2/2

    数据库优化 177 8.1 索引的使用 178 8.1.1索引对单个表查询的影响 178 8.1.2索引对多个表查询的影响 180 8.1.3多列索引对查询的影响 181 8.1.4索引的作用 182 8.1.5 索引的弊端 182 8.1.6 选择...

    2024年java面试题-数据库MySQL面试题第三部分

    #### 三、MySQL查询缓存的弊端及使用场景 - **弊端**: - 查询缓存可能因表的任何更新而被清空,导致频繁更新的表无法从中获益。 - **使用场景**: - 适用于读取远多于写入的表。 - **8.0版本变更**:MySQL 8.0...

    MySQL常见面试题答案及总结

    - 查询缓存可能导致内存浪费,因为即使数据已更新,缓存中的旧结果仍可能被返回。 - 更新频繁的表不适宜使用查询缓存,因为每次更新都会使整个缓存失效。 - MySQL 8.0中,查询缓存被删除,原因是其性能收益往往不...

    关于MySQL自增ID的一些小问题总结

    这是因为在InnoDB中,自增值存储在内存中,重启后会根据重启前的最大ID(即3)加1来设置新的自增值。 3. **手动插入ID后的自增值**: 当手动插入一个ID(如10)后,下次使用自增方式插入时,自增值会基于当前手动...

    memcached面试专题.pdf

    5. 在小规模网站中,MySQL的querycache可能会带来方便,但在网站规模扩大后,querycache的弊端会显现出来。memcached则适合在任何规模的网站中使用,并且随着空闲内存的增加,可以轻松扩展memcached集群的规模。 ...

    【计算机课程毕设】基于JavaWeb人力资源管理系统

    开发该系统需准备的环境包括:至少4GB内存的普通PC,Windows7或10操作系统,编程语言Java、JavaScript、HTML和CSS,开发工具Eclipse,服务器软件Tomcat7,数据库MySQL5.5,以及Firefox或Chrome浏览器。确保这些环境...

    Java面试宝典

    3. **MySQL临时表** - 临时表只在当前会话可见,会话结束时自动删除。 4. **MySQL处理重复数据** - **防止表中出现重复数据**: 使用唯一索引或主键约束。 - **查询重复记录**: 使用`GROUP BY`和`HAVING`子句。 ...

    MyBatis.docx

    持久化是指将内存中的数据转换到磁盘等非易失性存储设备中的过程。通常情况下,持久化意味着将程序数据存储到关系型数据库或 XML 文件中。在本案例中,指的是将页面数据转换为数据库模型(如 MySQL、SQL Server)的...

    示例3-4:使用连接池实现数据库连接.rar

    在传统的JSP开发中,开发者通常会直接在JSP页面中编写SQL语句并建立数据库连接,但这种方法存在诸多弊端,如资源浪费、线程安全问题以及代码可维护性差等。因此,引入连接池来管理数据库连接变得尤为重要。 连接池...

    核心数据库高可用开放计算解决方案.pdf

    此外,其具备先进的处理器、内存和I/O容错机制,如高级内存故障自愈(ADDDC)、PCIe错误实时修复(LER)和低延时高带宽的容错互联架构,确保了系统在面对硬件故障时仍能稳定运行。 软件方面,ServiceGuard for ...

Global site tag (gtag.js) - Google Analytics