mysql分区函数_mysql 分区可用函数

mysql分区函数_mysql 分区可用函数DAY()DAYOFMONTH()DAYOFWEEK()DAYOFYEAR()DATEDIFF()EXTRACT()HOUR()MICROSECOND()MINUTE()MOD()MONTH()QUARTER()SECOND()TIME_TO_SEC()TO_DAYS()WEEKDAY()YEAR()YEARWEEK()等当然,还有FLOOR(),CEILING()等,前提是使用这两个分区函数…

大家好,又见面了,我是你们的朋友全栈君。

DAY()

DAYOFMONTH()

DAYOFWEEK()

DAYOFYEAR()

DATEDIFF()

EXTRACT()

HOUR()

MICROSECOND()

MINUTE()

MOD()

MONTH()

QUARTER()

SECOND()

TIME_TO_SEC()

TO_DAYS()

WEEKDAY()

YEAR()

YEARWEEK() 等

当然,还有FLOOR(),CEILING() 等,前提是使用这两个分区函数的分区健必须是整型。

按星期分区的表  WEEKDAY从0开始

CREATE TABLE `bage_visitlist` (

`ipaddress` varchar(16) NOT NULL DEFAULT ”,

`visitfrom` varchar(16) NOT NULL DEFAULT ”,

`visittimes` int(10) unsigned NOT NULL DEFAULT ‘0’,

`visittime` datetime NOT NULL DEFAULT ‘2013-01-01 00:00:00’,

`deviceype` varchar(16) NOT NULL DEFAULT ”

) ENGINE=MyISAM DEFAULT CHARSET=utf8

PARTITION BY LIST (WEEKDAY(visittime))

(PARTITION d1 VALUES IN (0) ENGINE = MyISAM,

PARTITION d2 VALUES IN (1) ENGINE = MyISAM,

PARTITION d3 VALUES IN (2) ENGINE = MyISAM,

PARTITION d4 VALUES IN (3) ENGINE = MyISAM,

PARTITION d5 VALUES IN (4) ENGINE = MyISAM,

PARTITION d6 VALUES IN (5) ENGINE = MyISAM,

PARTITION d7 VALUES IN (6) ENGINE = MyISAM) ;

d1-d7有需要可以换成各个星期的缩写

星期一 MON

星期二 TUE

星期三 WED

星期四 THU

星期五 FRI

星期六 SAT

星期天 SUN

测试发现,分区插入是分区的,但是EXPLAIN  PARTITIONS跟踪发现都是全区扫描的,条件里加入WEEKDAY(visittime)这样的也不行

但是如果你插入的datetime字段是不带时间只有日期的话,where条件里没出现函数只用=来判断日期,是可以分区搜索的

分区应该和索引一样,一但where中出现函数,就会全区扫描

下面的表PARTITION BY LIST (month(create_time)),Explain结果不太乐观

mysql> Explain partitions select * from rec_pay where create_time = ‘2014-06-01 00:00:00’ limit 20;

+—-+————-+———+————+——+—————+——+———+——+——–+————-+

| id | select_type | table   | partitions | type | possible_keys | key  | key_len | ref  | rows   | Extra       |

+—-+————-+———+————+——+—————+——+———+——+——–+————-+

|  1 | SIMPLE      | rec_pay | p6         | ALL  | NULL          | NULL | NULL    | NULL | 176370 | Using where |

+—-+————-+———+————+——+—————+——+———+——+——–+————-+

mysql> Explain partitions select * from rec_pay where create_time < ‘2014-05-01 00:00:00’ and create_time > ‘2014-04-03 00:00:00’ limit 20;

+—-+————-+———+——————————————-+——+—————+——+———+——+———+————-+

| id | select_type | table   | partitions                                | type | possible_keys | key  | key_len | ref  | rows    | Extra       |

+—-+————-+———+——————————————-+——+—————+——+———+——+———+————-+

|  1 | SIMPLE      | rec_pay | p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12 | ALL  | NULL          | NULL | NULL    | NULL | 2517770 | Using where |

+—-+————-+———+——————————————-+——+—————+——+———+——+———+————-+

各个分区行数查询

SELECT table_name,partition_name,table_rows FROM information_schema.PARTITIONS  WHERE  table_schema=database() AND table_name=’table_name’

mysql explain字段说明

点击(此处)折叠或打开

EXPLAIN字段:

1 Table:显示这一行的数据是关于哪张表的

2 possible_keys:显示可能应用在这张表中的索引。如果为空,没有可能的索引。可以为相关的域从WHERE语句中选择一个合适的语句

3 key:实际使用的索引。如果为NULL,则没有使用索引。MYSQL很少会选择优化不足的索引,此时可以在SELECT语句中使用USE INDEX(index)来强制使用一个索引或者用IGNORE INDEX(index)来强制忽略索引

4 key_len:使用的索引的长度。在不损失精确性的情况下,长度越短越好

5 ref:显示索引的哪一列被使用了,如果可能的话,是一个常数

6 rows:MySQL认为必须检索的用来返回请求数据的行数

7 type:这是最重要的字段之一,显示查询使用了何种类型。从最好到最差的连接类型为system、const、eq_reg、ref、range、index和ALL

system、const:可以将查询的变量转为常量. 如id=1; id为 主键或唯一键.

eq_ref:访问索引,返回某单一行的数据.(通常在联接时出现,查询使用的索引为主键或惟一键)

ref:访问索引,返回某个值的数据.(可以返回多行) 通常使用=时发生

range:这个连接类型使用索引返回一个范围中的行,比如使用>或

index:以索引的顺序进行全表扫描,优点是不用排序,缺点是还要全表扫描

ALL:全表扫描,应该尽量避免

8 Extra:关于MYSQL如何解析查询的额外信息,主要有以下几种

using index:只用到索引,可以避免访问表.

using where:使用到where来过虑数据. 不是所有的where clause都要显示using where. 如以=方式访问索引.

using tmporary:用到临时表

using filesort:用到额外的排序. (当使用order by v1,而没用到索引时,就会使用额外的排序)

range checked for eache record(index map:N):没有好的索引.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/133092.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • kotlin中Activity跳转

    kotlin中Activity跳转问题描述:overridefunonClick(widget:View){valintent=Intent(AActivity.this,BActivity::class.java)startActivity(intent)}上面这个在kotlin中会报以下错:Noneofthefollowingfunctionscanbecalled…

    2022年5月11日
    43
  • oracle中sqrt函数的使用方法,PLSQL SQRT用法及代码示例[通俗易懂]

    oracle中sqrt函数的使用方法,PLSQL SQRT用法及代码示例[通俗易懂]SQRT函数是PLSQL中的内置函数,用于返回给定输入数字的平方根。用法:SQRT(number)使用的参数:该函数接受如下所示的参数:数字–这是要计算其平方根的输入数字。返回值:此函数返回一个数字,该数字是给定输入数字的平方根。下面给出了受支持的Oracle/PLSQL版本:甲骨文12c甲骨文11g甲骨文10g甲骨文9i甲骨文8i我们来看一些说明SQRT功能的示例:示例1:DECLARET…

    2022年5月13日
    116
  • 关于opencv报错:未定义标识符”CV_WINDOW_AUTOSIZE”[通俗易懂]

    关于opencv报错:未定义标识符”CV_WINDOW_AUTOSIZE”[通俗易懂]报错:未定义标识符”CV_WINDOW_AUTOSIZE”解决方案:在代码开头加入头文件#include<opencv2/highgui/highgui_c.h>

    2022年6月6日
    109
  • 电磁场与电磁波实验三 熟悉Mathematica软件在电磁场领域的应用

    电磁场与电磁波实验三 熟悉Mathematica软件在电磁场领域的应用假设一个铜环(或其他导电环)放在电磁铁的一极上。当电流接通时(如图中红色的电路颜色所示),环会飞离磁铁。随时间变化的磁场会在环内产生循环电流。这将不会发生,如果一个径向狭缝是通过环,从而防止任何电流循环。为了可视化,这个动作是用慢动作来显示的,圆盘在落回地面之前是停在半空中的。此demo展示了电偶极子或赫兹偶极子的电磁场、电场和磁场,相关的能量密度和坡印廷矢量分布。此demo可以改变直流或静态偶极场的偶极矩、频率和时间。该模型显示了极化正弦波的垂直电、磁分量。五、赫兹偶极子的电磁场。微信公众号创享日记。..

    2025年7月7日
    2
  • 单调栈用法_栈函数

    单调栈用法_栈函数单调栈,是指栈内元素从栈底到栈顶单调递增或单调递减的栈。简单来讲,单调栈=单调+栈,它同时满足两个特性:单调性、栈。以单调递增栈来讲解单调栈原理。假设当前元素为x,(1)若x<栈顶元素,那就不满足单调递增性,这时将栈中元素y弹出,若此时条件仍然不满足,则继续弹出栈顶元素,直到满足条件,再将x入栈;(2)若x>=栈顶元素,满足单调递增性,将x入栈;如此不断重复以上步骤,直到所有满足条件的元素都入栈。以一个具体例子[3,5,2,6,8]为例:(1)首先将3入栈,此时栈中元素为[3];(2

    2022年9月22日
    1
  • pip 安装.whl文件「建议收藏」

    pip 安装.whl文件「建议收藏」参见网址https://www.lfd.uci.edu/~gohlke/pythonlibs/,基本上包含了常用的pythonlib各个版本。下载本机机器上的python使用的对应版本的lib,切到下载位置,使用命令(以安装matplotlib为例):pip install ./matplotlib-2.2.3-cp36-cp36m-win32.whl 即可很快完成安装…

    2022年5月29日
    81

发表回复

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

关注全栈程序员社区公众号