欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

mysql 表 索引一些问题哈

程序员文章站 2024-02-02 14:33:52
...
谢谢大家了, 描述好像有点不清楚,主要问题是 索引不晓得要怎么加才好,而且数据多了要怎么处理

支付通知表 结构

字段 数据类型 长度 是否为空 默认值 pk 无符号 说明
id int 10 Y Y 自增ID
order_serial varchar 255 渠道订单号(不确定长度类型)
cp_serial varchar 255 游戏内部订单号(不确定长度类型)
order_money float 8,2 订单金额
channel_id smallint 6 Y 渠道ID
game_id smallint 6 Y 游戏ID
pay_stause tinyint 1 0 Y 渠道支付状态 0为支付失败 1为支付成功
pay_msg varchar 255 渠道支付信息
notice_status tinyint 1 0 Y 游戏通知返回状态 0为 未通知游戏方 1:成功 2:金额不符 3:订单号不存在 4:重复订单 5:用户不存在 6:数据验证失败
notice_msg varchar 255 游戏通知返回信息
start_date_time int 10 Y 接收订单时间

需求

一 插入
    (一) 插入了时候 需要判断 渠道ID 游戏ID 渠道订单号 和 游戏内部订单号 在表中是否存在
二 查询
    (一)  汇总查询  
       1、 时间段内按天统计  时间降序
              查询条件
                  时间段                 start_date_time  区间  必须
                  游戏ID                 game_id           非
                  渠道ID                 channel_id        非
              查询结果     
                  订单总数 渠道支付成功订单总数(pay_stause == 1) 
                  游戏通知成功总数(notice_status != 0) 
                  支付成功总金额(pay_stause == 1  order_money 合计 ) 
                  ![图片描述][1]
       2、订单明细查询  时间段内按天统计 时间降序
             查询条件 
                 时间段                 start_date_time 区间  必须
                 渠道订单号             order_serial        非
                 游戏内部订单号          cp_serial           非
                 游戏ID                game_id             非
                 渠道ID                channel_id          非
                 渠道支付状态           notice_status       非
                 游戏通知返回状态        notice_status       非
        查询结果 
                订单详情
                ![图片描述][2]

问题

 (一) 目前给渠道订单号  游戏内部订单号  加上联合索引 方便插入了时候快速查到是否存在

 (二)汇总查询中 
     **按天查询 目前想到了 只有 from_unixtime下 分组,利用区间来 减少扫描行数,但是出现临时表 文件排序 这个要怎么处理 **
      订单汇总 查询单位时间内总单数
      `SELECT from_unixtime(start_date_time,'%Y-%m-%d') as currentDay, count(id) AS count_order_number FROM table_pay_notice  where start_date_time between '1421510400' and  '1422806399' group by currentDay`
      ![图片描述][3]
      订单汇总 查询下行通知成功总数 
      `SELECT from_unixtime(start_date_time,'%Y-%m-%d') as currentDay, count(id) AS count_notice_success_number FROM table_pay_notice  where result_status != 0 AND start_date_time between '1421510400' and  '1422806399' group by currentDay`
      ![图片描述][4]
      统计上行 支付成功数量  支付成功金额 
      `SELECT from_unixtime(start_date_time,'%Y-%m-%d') as currentDay, count(id) AS count_pay_success_number ,sum(order_money) FROM table_pay_notice  where order_status = 1 AND start_date_time between '1421510400' and  '1422806399' group by currentDay`
       ![图片描述][5]
(三) 订单明细中 索引要怎么加 条件就是一个时间是必须了 而其他条件都是非必须了 联合查询 要怎么加 不懂得

问题三 如果要分表 如何分 查询好像又是一个问题

上面就是碰到了问题,麻烦大家了

回复内容:

谢谢大家了, 描述好像有点不清楚,主要问题是 索引不晓得要怎么加才好,而且数据多了要怎么处理


支付通知表 结构

字段 数据类型 长度 是否为空 默认值 pk 无符号 说明
id int 10 Y Y 自增ID
order_serial varchar 255 渠道订单号(不确定长度类型)
cp_serial varchar 255 游戏内部订单号(不确定长度类型)
order_money float 8,2 订单金额
channel_id smallint 6 Y 渠道ID
game_id smallint 6 Y 游戏ID
pay_stause tinyint 1 0 Y 渠道支付状态 0为支付失败 1为支付成功
pay_msg varchar 255 渠道支付信息
notice_status tinyint 1 0 Y 游戏通知返回状态 0为 未通知游戏方 1:成功 2:金额不符 3:订单号不存在 4:重复订单 5:用户不存在 6:数据验证失败
notice_msg varchar 255 游戏通知返回信息
start_date_time int 10 Y 接收订单时间

需求

一 插入
    (一) 插入了时候 需要判断 渠道ID 游戏ID 渠道订单号 和 游戏内部订单号 在表中是否存在
二 查询
    (一)  汇总查询  
       1、 时间段内按天统计  时间降序
              查询条件
                  时间段                 start_date_time  区间  必须
                  游戏ID                 game_id           非
                  渠道ID                 channel_id        非
              查询结果     
                  订单总数 渠道支付成功订单总数(pay_stause == 1) 
                  游戏通知成功总数(notice_status != 0) 
                  支付成功总金额(pay_stause == 1  order_money 合计 ) 
                  ![图片描述][1]
       2、订单明细查询  时间段内按天统计 时间降序
             查询条件 
                 时间段                 start_date_time 区间  必须
                 渠道订单号             order_serial        非
                 游戏内部订单号          cp_serial           非
                 游戏ID                game_id             非
                 渠道ID                channel_id          非
                 渠道支付状态           notice_status       非
                 游戏通知返回状态        notice_status       非
        查询结果 
                订单详情
                ![图片描述][2]

问题

 (一) 目前给渠道订单号  游戏内部订单号  加上联合索引 方便插入了时候快速查到是否存在

 (二)汇总查询中 
     **按天查询 目前想到了 只有 from_unixtime下 分组,利用区间来 减少扫描行数,但是出现临时表 文件排序 这个要怎么处理 **
      订单汇总 查询单位时间内总单数
      `SELECT from_unixtime(start_date_time,'%Y-%m-%d') as currentDay, count(id) AS count_order_number FROM table_pay_notice  where start_date_time between '1421510400' and  '1422806399' group by currentDay`
      ![图片描述][3]
      订单汇总 查询下行通知成功总数 
      `SELECT from_unixtime(start_date_time,'%Y-%m-%d') as currentDay, count(id) AS count_notice_success_number FROM table_pay_notice  where result_status != 0 AND start_date_time between '1421510400' and  '1422806399' group by currentDay`
      ![图片描述][4]
      统计上行 支付成功数量  支付成功金额 
      `SELECT from_unixtime(start_date_time,'%Y-%m-%d') as currentDay, count(id) AS count_pay_success_number ,sum(order_money) FROM table_pay_notice  where order_status = 1 AND start_date_time between '1421510400' and  '1422806399' group by currentDay`
       ![图片描述][5]
(三) 订单明细中 索引要怎么加 条件就是一个时间是必须了 而其他条件都是非必须了 联合查询 要怎么加 不懂得

问题三 如果要分表 如何分 查询好像又是一个问题

上面就是碰到了问题,麻烦大家了

?????换个浏览器就页面不存在?