MyCATApache / Mycat-Server

GNU General Public License v2.0
9.48k stars 3.85k forks source link

按月分片where between语句查询失败问题 #1995

Open toxmc opened 5 years ago

toxmc commented 5 years ago

mycat VERSION 5.6.29-mycat-1.6-RELEASE-20161028204710

字段类型是date

image

配置信息如下: schema.xml

<table name="forum_detail" primaryKey="ID" dataNode="dn0,dn1,dn2,dn3,dn4,dn5,dn6,dn7,dn8,dn9,dn10,dn11" rule="sharding-by-month" />

rule.xml

        <tableRule name="sharding-by-month">
                <rule>
                        <columns>ymd</columns>
                        <algorithm>partbymonth</algorithm>
                </rule>
        </tableRule>
        <function name="partbymonth"
                class="io.mycat.route.function.PartitionByMonth">
                <property name="dateFormat">yyyy-MM-dd</property>
                <property name="sBeginDate">2018-01-01</property>
        </function>

使用了where between语句,explain sql,发现DATA_NODE为dn0 image

用条件语句 ymd >= 'yyyy-mm-dd' and ymd <= 'yyyy-mm-dd' 替换where between可以得到正确的结果

网上查找相关问题得到 image

我想问的是目前是还不支持时间字段的where between语句吗?还是我的配置有误。

nchuxyz commented 5 years ago

是支持的

ZS9527 commented 5 years ago

请问这个between条件查询只查询一个节点,而大于小于就可以全部节点搜索的这个问题该怎么解决?

ZS9527 commented 5 years ago

image

toxmc commented 5 years ago

数值类型的可以between and, 时间的感觉还是改成条件的方式

ZS9527 commented 5 years ago

这个问题的原因找到了,是因为rule配置没有配endTime,还需要where查询条件的日期格式和rule配置格式一致。between and就可以找到正确的路由节点,而不用大于小于条件来全路由搜索了。