首页 MySql mysql高级排序高级匹配查询示例

mysql高级排序高级匹配查询示例

在大多数应用场景下,我们使用mysql进行查询时只会用到=, , , in, like 等常用的方法,看起来,大多数情况下,已经足以应付我们的小型应用了。不过,在一些特殊场景,则需要特殊的查询方式了。1. 根据状态来排序的查询假设现在一个记录有四种状态,未处理(0)

  在大多数应用场景下,我们使用mysql进行查询时只会用到’=’,’>’,’<',in,like 等常用的方法,看起来,大多数情况下,已经足以应付我们的小型应用了。不过,在一些特殊场景,则需要特殊的查询方式了。

  1. 根据状态来排序的查询

    假设现在一个记录有四种状态,未处理(0)、正在处理(2)、处理成功(1)、处理失败(4),之所以他们的值是这个样子,是因为我们一般情况下是不会用它去排序,所以自然的就想到这样的一些值赋予意义。但是,在排序的时候怎么处理呢? 假如要求的先后顺序是这样的:未处理>处理失败>正在处理>处理成功, 我能想到的就是,假设它们这些状态就是按照要求的排序的值去依次增加的,那就只需要一个order by 该字段即可。具体实现如下:

tab_task b ( b.deal_status ) ,b.add_time 按照所需排序值,依次赋值

如果是要根据某个计算的值来排序,如按平均成绩排序,则实现如下:

score b uid (b.`score`) ;    直接计算得出排序值,使用RAND()可以得到随机的排序

  2. 比较复杂的模糊查询

    有时,我们需要从某字段中筛选符合条件的值,但是该值又不是一个独立的字段,这时就需要一些高级的模糊查询(正则)。

如,需要查询某个值大于0的记录,实现如下:

tab_day_data retention_days_full REGEXP ; 查询rd{x}大于0的记录,其中rd可能是许多个类似的不重要的值,被储存至一个字段,同理于其他

mysql正则语法,如下:

任意字母和数字(同 任意字符(同 空格和制表(同 ASCII控制字符( 任意数字(同 与 任意小写字线(同 既不在 又不在 包括空格在内的任意空白字符(同 任意大小字母(同 任意十六进制数字(同 元字符 .?{m}{m,}{m,n}

  语法与正宗的正则不太一致,但大体原理是一致的。

  用mysql做复杂的匹配,虽然可以实现,但是相对来说效率低下,最好还是使用独立字段的形式进行查询,用空间换取时间!

3. 检查校验和,验证表是否相等

数据在传输时,可能会发生变化,也有可能因为其它原因损坏,为了保证数据的一致,我们可以计算checksum(校验值)。

使用MyISAM引擎的表会把checksum存储起来,称为live checksum,当数据发生变化时,checksum会相应变化。

CHECKSUM tbl_name …

  附:mysql进程查看,卡死现象的解决办法

SHOW SHOW STATUS; # 查看总体运行概况

<span style=”color: #0000ff;”>KILL <span style=”color: #800000; font-weight: bold;”>213; # 将运行慢或卡死的进程删除,注意数据的事务性,否则可能导致数据错误

  

  问?

  mysql 分表之后(比如按年分表,多个相关联表同步拆分),查询应该怎样做才好?

本文来自网络,不代表云浮站长网立场。转载请注明出处: https://www.0766zz.com/html/shujuku/mysql/20200901/8900.html
上一篇
下一篇

作者: dawei

【声明】:云浮站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

为您推荐

返回顶部