在设计表或索引时,常出现以下几个问题:

1、少建索引或不建索引。这个问题最突出,建议建表时 DBA 可以一起协助把关。

2、索引滥用。滥用索引将导致写请求变慢,拖慢整体数据库的响应速度(5.5 以下的 mysql 只能用到一个索引)。

3、从不考虑联合索引。实际上联合索引的效率往往要比单列索引的效率更高。

4、非最优列选择。低选择性的字段不适合建单列索引,如 status 类型的字段。

二、慢 SQL 问题

2.1 导致慢 SQL 的原因

在遇到慢 SQL 情况时,不能简单的把原因归结为 SQL 编写问题(虽然这是最常见的因素),实际上导致慢 SQL 有很多因素,甚至包括硬件和 mysql 本身的 bug。根据出现的概率从大到小,罗列如下:

1、SQL编写问题

2、锁

3、业务实例相互干绕对 IO/CPU 资源争用

4、服务器硬件

5、MYSQL BUG

2.2 由 SQL 编写导致的慢 SQL 优化

针对SQL编写导致的慢 SQL,优化起来还是相对比较方便的。正如上一节提到的正确的使用索引能加快查询速度,那么我们在编写 SQL 时就需要注意与索引相关的规则:

1、字段类型转换导致不用索引,如字符串类型的不用引号,数字类型的用引号等,这有可能会用不到索引导致全表扫描;

2、mysql 不支持函数转换,所以字段前面不能加函数,否则这将用不到索引;

3、不要在字段前面加减运算;

4、字符串比较长的可以考虑索引一部份减少索引文件大小,提高写入效率;

5、like % 在前面用不到索引;

6、根据联合索引的第二个及以后的字段单独查询用不到索引;

7、不要使用 select *;

8、排序请尽量使用升序 ;

9、or 的查询尽量用 union 代替 (Innodb);

10、复合索引高选择性的字段排在前面;

11、order by / group by 字段包括在索引当中减少排序,效率会更高。

除了上述索引使用规则外,SQL 编写时还需要特别注意一下几点:

1、尽量规避大事务的 SQL,大事务的 SQL 会影响数据库的并发性能及主从同步;

2、分页语句 limit 的问题;

3、删除表所有记录请用 truncate,不要用 delete;

4、不让 mysql 干多余的事情,如计算;

5、输写 SQL 带字段,以防止后面表变更带来的问题,性能也是比较优的 ( 涉及到数据字典解析,请自行查询资料);

6、在 Innodb上用 select count(*),因为 Innodb 会存储统计信息;

7、慎用 Oder by rand()。

三、分析诊断工具

在日常开发工作中,我们可以做一些工作达到预防慢 SQL 问题,比如在上线前预先用诊断工具对 SQL 进行分析。常用的工具有:

1、mysqldumpslow

2、mysql profile

3、mysql explain

具体使用及分析方法在此就不赘述,网上有丰富的资源可以参考。

四、误操作、程序 bug 时怎么办

提出这个问题显然主要是针对刚开始工作的年轻同行们……实际上误操作和程序 bug 导致数据误删或者混乱的问题并非少见,但是刚入行的开发工作者会比较紧张。一个成熟的企业往往会有完善的数据管理规范和较丰富的数据恢复方案(初创公司除外),会进行数据备份和数据容灾。当你发现误操作或程序 bug 导致线上数据被误删或误改动时,一定不能慌乱,应及时与 DBA 联系,第一时间进行数据恢复(严重时直接停止服务),尽可能减少影响和损失。对于重要数据(如资金)的操作,在开发时一定要反复进行测试,确保没有问题后再上线。

mysql 字段加减_MySQL数据库开发常见问题及优化(续)相关推荐

  1. mysql 字段加减_Mysql常见问题及优化

    一.库表设计 1.1 引擎选择 在 mysql 5.1 中,引入了新的插件式存储引擎体系结构,允许将存储引擎加载到正在运新的 mysql 服务器中.使用 mysql 插件式存储引擎体系结构,允许数据库 ...

  2. mysql 字段加减_MySQL中你必须了解的函数

    在学习MySQL的时候你会发现,它有非常多的函数,在学习的时候没有侧重.小编刚开始学习的时候也会有这个感觉.不过,经过一段时间的学习之后,小编发现尽管函数有很多,但是常用的却只有那几个.今天小编就把常 ...

  3. mysql 字段加减_Mysql数据清洗—Null值的处理技巧

    1:首先要了解为什么库中会存在Null值? 答:举个例子,市面上部分产品的的注册页会要求用户填写邀请码,这样邀请人才会得到奖励,如果用户注册的时候不是被其他人邀请注册的,那么无需填写邀请码,直接注册即 ...

  4. mysql数据库开发常见问题及优化

    mysql 数据库是被广泛应用的关系型数据库,其体积小.支持多处理器.开源并免费的特性使其在 Internet 中小型网站中的使用率尤其高.在使用 mysql 的过程中不规范的 SQL 编写.非最优的 ...

  5. mysql 时间戳加减_mysql加减时间-函数-时间加减

    mysql加减时间-函数-时间加减 mysql加减时间-函数-时间加减 1. MySQL 为日期增加一个时间间隔:date_add() set @dt = now(); select date_add ...

  6. mysql字段中有问号_Mysql数据库,表中有中文时,select出来好多问号(?)的解决方法...

    首先,我用的是zip包的Mysql,直接解压使用的,网上说修改my.ini或者my.cnf在我机器上根本就找不到.但是my.ini这个东西是可以自己添加的.将mysql目录中的my-default.i ...

  7. mysql字段是问号_Mysql数据库中文字段显示问号怎么解决?

    Mysql中文字段显示问号是因为字段的字符集不对,不是utf8.解决方法:使用sql语句"ALTER TABLE 表名 MODIFY 字段名 类型(50) CHARACTER SET &qu ...

  8. mysql月份加减_MySQL 日期加减

    1. addtime() 为日期加上指定秒数 select addtime(now(),1); -- 加1秒 2. adddate() 有两种用法,第二个参数直接填数字的话是为日期加上指定天数,填in ...

  9. 数据库mysql字段加换行_数据库字段换行

    ----存入数据库前去空格: private string cleanString(stringnewStr) {if (!string.IsNullOrEmpty(newStr)) { newStr ...

最新文章

  1. 三年后75%企业数据将移至云端?SAP新应用加速云服务
  2. 测试Infineon车载LED驱动芯片TLD2131
  3. Android获取状态栏、标题栏、屏幕高度
  4. UVA 12298——Super Poker II
  5. 元组、字典、集合的常用方法
  6. Mac 上开启一个简单的服务器
  7. paip . 解决spring No unique bean of type [com.mijie.homi.search.service.index.MoodUserIndexService]
  8. hdu 4794 FIb求循环节
  9. 互联网30年,泡沫如梦
  10. Android音频系统
  11. 软件质量的定义及其六大特性(质量模型)
  12. Python将经纬度数据转换成浮点数据
  13. 加入中视频计划赚钱吗?你还别不信收益确定高
  14. 利用洪特规则计算原子离子磁矩过程详解
  15. HTTP常见状态码404、400、500等对应的错误原因
  16. 计算机中2种格式化,什么叫“格式化”?
  17. linux随机输出加减乘除_实现加减乘除计算器
  18. 2020中国游戏公司财报分析《笔记》
  19. 网上蛋糕商城JSP页面
  20. 几种求最小公倍数的方法

热门文章

  1. linux服务器数据库和监听自启动,linux64的神通数据库安装与启动
  2. flink其他可选api
  3. 初探队与广度优先搜索
  4. 光栅衍射C语言程序,基于matcom的光栅衍射仿真程序
  5. Java 什么是静态内部类
  6. 笨方法学python - 03
  7. bzoj 2428: [HAOI2006]均分数据
  8. 2017-7-18-每日博客-关于Linux下的通配符.doc
  9. 实现Mybatis接口模式下的数据库调用分离
  10. PKU 3667 HDOJ 3667 Hotel ACM 3667 IN HDU