0 0

关于mysql分区表扫描问题5

mysql> CREATE TABLE `se_keywords_log_temp` (
    ->   `id` bigint(20) NOT NULL,
    ->   `domain` varchar(50) NOT NULL,
    ->   `encode` varchar(8) NOT NULL,
    ->   `seType` varchar(8) NOT NULL,
    ->   `serIP` varchar(50) NOT NULL,
    ->   `uriStem` varchar(256) NOT NULL,
    ->   `uriQuery` varchar(512) NOT NULL,
    ->   `Referer` varchar(1024) NOT NULL,
    ->   `wd` varchar(256) NOT NULL,
    ->   `pn` int(11) NOT NULL,
    ->   `member_id` varchar(10) NOT NULL,
    ->   `id_id` varchar(10) NOT NULL,
    ->   `dtime` datetime NOT NULL,
    ->   `isSag` tinyint(4) NOT NULL,
    ->   KEY `setype_index` (`seType`)
    -> ) ENGINE=MyISAM DEFAULT CHARSET=utf8
    -> PARTITION BY RANGE (to_days(dtime))
    -> (PARTITION pmin VALUES LESS THAN (to_days('2011-05-01')),
    -> PARTITION p201105 VALUES LESS THAN (to_days('2011-06-01')),
    -> PARTITION p201106 VALUES LESS THAN (to_days('2011-07-01')),
    -> PARTITION p201107 VALUES LESS THAN (to_days('2011-08-01')),
    -> PARTITION pmax VALUES LESS THAN MAXVALUE);

建了一个分区表
mysql> explain partitions select * from se_keywords_log_temp where dtime>'2011-05-02' and dtime<'2011-05-29';
+----+-------------+----------------------+--------------+--------+---------------+------+---------+------+------+-------+
| id | select_type | table                | partitions   | type   | possible_keys | key  | key_len | ref  | rows | Extra |
+----+-------------+----------------------+--------------+--------+---------------+------+---------+------+------+-------+
|  1 | SIMPLE      | se_keywords_log_temp | pmin,p201105 | system | NULL          | NULL | NULL    | NULL |    1 |       |
+----+-------------+----------------------+--------------+--------+---------------+------+---------+------+------+-------+
1 row in set (0.01 sec)


按照扫描条件,应该只扫描p201105分区但为什么还扫描了pmin?
2012年2月25日 23:07

1个答案 按时间排序 按投票排序

0 0

这个问题可以参考下官方的回答,
http://forums.mysql.com/read.php?106,514232,514232#msg-514232

大致的原因是:
  dtime>'2011-05-02' and dtime<'2011-05-29';
  换成 BETWEEN and  就好了!
  他们的解释是 mysql 对分区的字段只能解析 为整数!

希望对你有帮助

2012年3月03日 15:11

相关推荐

    创建mysql表分区的方法

    3. **添加数据**:向分区表中插入数据,MySQL会自动根据分区规则分配。 4. **管理分区**:可以添加、删除或重定义分区,以适应数据变化。 **示例:RANGE分区创建** ```sql CREATE TABLE p_range ( id INT(10) NOT...

    mysql 数据库表分区

    - 注意,不当的分区设计可能导致全表扫描,反而降低性能。 6. **TriggerController.class.php**: - 这个文件可能是处理触发器操作的PHP类,触发器在数据库中是与表关联的存储程序,会在特定操作(如INSERT、...

    MySQL 分区

    2. **避免全表扫描**:如果查询涉及所有分区,那么分区的优势就无法体现出来。 3. **分区数量适中**:过多的分区会增加管理复杂性,太少则可能无法充分利用分区的优势。 4. **维护分区**:定期清理过期数据,如删除...

    详解MySQL分区表

    【MySQL分区表详解】 分区表是数据库管理中一种高级的数据组织策略,主要目的是为了提高大表的查询效率和数据管理的便利性。在MySQL中,分区表是通过`PARTITION BY`子句来实现的,它允许我们将一个大的表根据特定的...

    MySQL分区表的最佳实践指南

    MySQL分区表是一种优化大型数据库性能的技术,它将大表逻辑上划分为更小、更易管理的部分,以提高查询速度和数据管理效率。本文将深入探讨MySQL分区表的最佳实践,包括分区的目的、类型、操作示例以及适用场景。 1....

    MySQL分区分表方案实践手册

    2. **避免全表扫描**:分区并不能避免全表扫描,如果查询条件不涉及分区键,可能仍然会导致全表扫描,降低性能。 3. **维护操作**:插入、更新和删除操作都需要考虑对分区的影响,尤其是在动态分区时,要确保这些...

    MySQL的表分区详解

    然而,值得注意的是,尽管MySQL分区提供了许多优势,但在实际应用中,需要根据具体业务需求和查询模式来决定是否使用分区,以及如何设计分区策略。在创建分区表后,可以通过调整分区方案来优化常见查询的性能。此外...

    (mysql面试题)MySQL中的分区表的概念及其作用及代码展示.txt

    ### MySQL中的分区表概念及其作用 #### 一、分区表定义 在MySQL中,分区表是一种高级技术,它允许用户将一个大型表物理地分割成若干个较小的部分,即分区。这种分割方式不仅可以显著提高查询效率,还可以简化数据...

    mysql分区文档

    MySQL 分区是数据库管理系统中的一种优化策略,它将大型表的数据分布在不同的物理存储上,以提高查询性能和便于管理大量数据。分区的本质是将一张大表逻辑上分成多个部分,但用户在操作时仍然将其视为单个表。MySQL ...

    mysql使用教程之分区表的使用方法(删除分区表)

    在本文中,我们将探讨MySQL分区表的使用方法,特别是关于如何新增分区、删除分区以及对分区进行合并和拆分。 **分区的好处** 1. **提高查询性能**:通过将数据划分为不同的分区,查询时只需要检查与条件匹配的分区...

    Rails中使用MySQL分区表一个提升性能的方法

    在Rails应用中,当面临大数据表的处理时,MySQL的分区表是一个实用的优化...在实际应用中,对于任何使用分区表的情况,都应当确保ActiveRecord的所有操作都能够充分利用分区特性,以避免全表扫描,从而最大化性能优势。

    MySQL分区实战

    #### 一、MySQL分区概述与应用场景 在当今互联网行业中,MySQL数据库作为最常用的关系型数据库之一,在数据管理方面扮演着极其重要的角色。随着数据量的不断增长,对数据库性能的要求也日益提高。为了提高查询效率...

    MySQL分区表的正确使用方法

    MySQL分区表是一种优化大数据量表性能的...总结,MySQL分区表是解决大数据量表问题的有效手段,能够提高查询性能,简化历史数据清理,并帮助管理海量数据。正确理解和应用分区技术,可以显著提升数据库系统的整体效能。

    MYSQL锁表问题的解决方法

    通过合理的设计数据库表结构,如避免全表扫描、使用合适的数据类型和索引,可以减少锁的使用。在表结构设计时,考虑数据分布和访问模式,使用分区、分表等技术,可以进一步提高并发性能。 7. **监控与报警** 实施...

    mysql分区资源整理

    这样,在查询时,如果已知用户的年龄范围,就可以直接定位到相关的分区,避免全表扫描,从而大大提高查询效率。 #### 五、分区与水平分表的区别 虽然分区与水平分表(也称为分表)在目的上有相似之处——都是为了...

Global site tag (gtag.js) - Google Analytics