语音交友APP源码中MySQL数据库开发的6个“避免”

由于在语音交友APP源码中需要进行MySQL数据库的开发 , 而MySQL数据库开发又会涉及到许多操作 , 所以要尽量避免在语音交友APP源码开发中出现相关的错误 , 以下就是应该避免的问题 。
1、避免在数据库中做运算
有句话叫做“别让脚趾头想事情 , 那是脑瓜子的职责” , 用在数据库开发中 , 说的就是避免让语音交友APP源码的数据库做她不擅长的事情 。MySQL并不擅长数学运算和逻辑判断 , 所以尽量不在语音交友APP源码数据库做运算 , 复杂运算可以移到程序端CPU 。
2、避免对索引列做运算
有次 , 有位同事让我看一条SQL , 说是在前台查询很快 , 但是把SQL取出来 , 在数据库中执行的时候 , 跑10分钟都不出结果 。
看了一下SQL , 最后定位到一个视图中的一个子查询上面 。该子查询的SQL文本如下:
SELECTacinv_07.id_item ,SUM(acinv_07.dec_endqty) dec_endqtyFROMacinv_07WHEREacinv_07.fiscal_year * 100 + acinv_07.fiscal_period = ( SELECT DISTINCTctlm1101.fiscal_year * 100 + ctlm1101.fiscal_periodFROM ctlm1101 WHERE flag_curr = 'Y'AND id_oprcode = 'acinv'AND acinv_07.id_wh = ctlm1101.id_table)GROUP BY acinv_07.id_item
在表上的列和列是有索引的 。但是 , 如果对索引列进行运算 , 就会导致原本可以走索引的走不了索引 。于是 , 动手改写成如下SQL:
SELECTid_item ,SUM(dec_qty) dec_qtyFROMdpurreq_03GROUP BYid_item) a ,( SELECTa.id_item ,SUM(a.dec_endqty) dec_endqtyFROMacinv_07 a ,( SELECT DISTINCTctlm1101.fiscal_year ,ctlm1101.fiscal_period ,id_tableFROMctlm1101WHEREflag_curr = 'Y'AND id_oprcode = 'acinv') bWHEREa.fiscal_year = b.fiscal_yearAND a.fiscal_period = b.fiscal_periodAND a.id_wh = b.id_tableGROUP BYa.id_item
再执行 , 4s钟左右就可以跑出结果了 。
总的来说 , 在语音交友APP源码中写SQL时 , 不到万不得已 , 不要对索引列进行计算 。
3、避免count(*)
在分页查询的时候 , 有的人总是习惯用 count()获得总的记录条数 , 实际上这不是一个高效的做法 , 因为 , 之前获得数据的时候已经查询过一次了 ,  count()相当于同一个语句查询了两次 , 对语音交友APP源码的数据库开销自然就大了 , 我们应当使用语音交友APP源码数据库自带的API , 或者系统变量来完成这个工作 。
4、避免使用NULL字段
大家在语音交友APP源码数据库表字段设计的时候 , 应该尽量都加上NOT NULL‘’ 。
使用NULL字段会产生很多不好的影响 , 例如:很难进行查询优化、NULL列加索引 , 需要额外空间、含NULL复合索引无效……
看下面的案例:
数据初始化:create table table1 (`id` INT (11) NOT NULL,`name` varchar(20) NOT NULL)create table table2 (`id` INT (11) NOT NULL,`name`varchar(20))insert into table1 values (4,"zhaoyun"),(2,"zhangfei"),(3,"liubei")insert into table2 values (1,"zhaoyun"),(2, null)
(1) NOT IN子查询在有NULL值的情况下返回永远为空结果 , 查询容易出错
select name from table1 where name not in (select name from table2 where id!=1)
(2) 列值允许为空 , 索引不存储null值 , 结果集中不会包含这些记录 。
select * from table2 where name != 'zhaoyun'
select * from table2 where name != 'zhaoyun1'

语音交友APP源码中MySQL数据库开发的6个“避免”