1 开启事务之前需要rollback 连接句柄。(清理垃圾)
2 mysql_ping 失败,程序需要处理重连逻辑;
3 mysql_query()执行的SQL语句是一个以‘/0’结尾的字符串,而mysql_real_query()执行的字符串长度是参数指定的,因此,前者不能不能包含二进制数据(二进制数据中可能会包含‘/0’,导致被认为到达字符串末尾)
实际使用中,推荐使用mysql_real_query
4 mysql C API   中SQL不需要 ';' 结尾;
5 mysql 转义;(老问题了)
6 所有update 语句,建议后边调用函数判断受影响的行数,是否是自己预期值;
7 mysql_real_connect 需要设置连接超时时间,特别是处理重连逻辑的时候,以免程序堵死;
8 程序rollback时候, 需要习惯性的校验应用的错误码,避免错误码没有赋值,调用者以为调用成功,造成漏洞;
9 多线程环境下使用libmysqlclient_r 库,非libmysqlclient 库
10 mysql_real_connect/mysql_init 多线程环境下调用需要加锁;
11 使用mysql_real_escape_string, 需要注意目标缓冲区是 2*n+1 大小;
12 mysql_store_result 这个函数是分配的内存的。 使用完需要释放,避免内存泄露;

13 mysql的事务尽量小,使用完,立即commit或rollback.不要起一个过大的事务。
14 mysql的隔离级别注意使用 Read Commited。不然会产生锁间隙的问题。
15 避免尝试去锁一个不存在的记录,for update语句where条件请使用主键(锁定一个非主键,会默认同时锁定一个主键,这是造成很多死锁的原因)。避免过多的for update。
16 select语句必须使用索引,where条件避免使用 or 或者在条件中运用运算表达式,会造成索引失效。
17 联合索引可以替代单独的索引。如果已有联合索引,不需要重复建立单独的索引。索引过多会导致插入变慢。注意是联合索引的第一个可以省略。 避过(f1,f2),可以省略f1的单独索引,但是不能省略f2的单独索引。
18 where条件,结果集不要太大,如果超过30%,索引会时效,会导致mysql扫描全表。不确定时,请用explain做检测。
19 mysql单表记录保持在1000W以下,以获得较好的性能。
20 mysql数据库链接数不能过多,请保持在200以下。
21 修改mysql 锁等待时间,默认为50s,避免for update等待时间超长,造成系统阻塞 innodb_lock_wait_timeout(修改这个属性需要重启数据库)
22 如果启用事务,可以不必显示的设置set autocommit=0,即使当时autocommit模式为1(直接提交模式),可以通过begin/commit来隐式的调用。
   如果不使用事务,则必须显示的调用 set autocommit=1.因为不能确定,是否某长链接中,有人设置了set autocommit=0.

Mysql使用优化之处(转)的更多相关文章

  1. Mysql - 性能优化之子查询

    记得在做项目的时候, 听到过一句话, 尽量不要使用子查询, 那么这一篇就来看一下, 这句话是否是正确的. 那在这之前, 需要介绍一些概念性东西和mysql对语句的大致处理. 当Mysql Server ...

  2. [MySQL性能优化系列]提高缓存命中率

    1. 背景 通常情况下,能用一条sql语句完成的查询,我们尽量不用多次查询完成.因为,查询次数越多,通信开销越大.但是,分多次查询,有可能提高缓存命中率.到底使用一个复合查询还是多个独立查询,需要根据 ...

  3. 30多条mysql数据库优化方法,千万级数据库记录查询轻松解决(转载)

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  4. 50多条mysql数据库优化建议

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 缺省情况下建立的索引是非群集索引,但有时它并不是最佳的.在非群集索引下,数据在物理上随机存 ...

  5. Mysql数据库优化总结2

    说明:本文的环境为CENTOS 5.5 64 Bit /Mysql 5.1.50 简介:使用Mysql有一段时间了,期间做了不少关于Mysql优化.设计.维护的工作,这两天有时间做一下简单的总结,方便 ...

  6. 30多条mysql数据库优化方法【转】

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  7. redmine在linux上的mysql性能优化方法与问题排查方案

    iredmine的linux服务器mysql性能优化方法与问题排查方案     问题定位:   客户端工具: 1. 浏览器inspect-tool的network timing工具分析   2. 浏览 ...

  8. 转载:30多条mysql数据库优化方法,千万级数据库记录查询轻松解决

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  9. 浅谈MySQL中优化sql语句查询常用的30种方法 - 转载

    浅谈MySQL中优化sql语句查询常用的30种方法 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中使 ...

随机推荐

  1. 单线程实现同时监听多个端口(windows平台c++代码)

    前言 多年前开发了一套网络库,底层实现采用IOCP(完成端口).该库已在公司多个程序中应用:经过多次修改,长时间检验,已经非常稳定高效. 最近把以前的代码梳理了一下,又加进了一些新的思路.代码结构更加 ...

  2. rabbitmq 生产环境配置

    目录 一 rabbitmq 生产部署 1.1 rabbitmq.conf 1.2 advanced.config 1.3 rabbitmq-env.conf 1.4 在生产环境中不适用的策略. 一 r ...

  3. java开发细节问题,spring的单例模式,多线程同步问题

    1.对象的赋值,new一个对象,然后在传递给函数赋值,往往这对对象赋值就可以使用了 2.对于 spring开发的细节问题 Spring框架里的bean,或者说组件,获取实例的时候都是默认的单例模式,这 ...

  4. mysqldump主要参数探究

    在数据库的日常维护中,对于数据量小的备份,我们常常采用的是逻辑备份,也就是使用mysqldump导出.数据量比较大的备份会使用percona的xtrabackup,关于xtrabackup工具的使用以 ...

  5. [深入Maven源代码]maven绑定命令行参数到具体插件

    maven的插件 我们知道Maven具体构建动作都是由插件执行的,maven本身只是提供一个框架,这样就提供了高度可定制化的功能,我们用maven命令执行比如mvn clean package这样的命 ...

  6. .Net Core vs .Net Framework 如何为一个应用程序选择一个运行时(翻译)

    .Net Core是下一件大事吗?我已经使用了一段时间了,我倾向认为它是.事实上,我们推测,在2018年,对这项技术熟练的开发人员将会有巨大的需求.但是它和.Net Framework的区别是什么?你 ...

  7. eclipse下查看java源码设置

    myway: 1.选择一函数,按住ctrl,显示open declaration(或按F3); 2.点进去: 如果未配置,点 source attachment configuration -- ex ...

  8. HTTP 无法注册URL 进程不具有命名空间的访问权限

    写WCF时在 host.Open(); 报错:HTTP 无法注册 URL http://+:9999/CalculatorService/.进程不具有此命名空间的访问权限(有关详细信息,请参见 htt ...

  9. ASP.NET开发,从二层至三层,至面向对象 (5)

    此是一系列博文,最后一篇了.也是面向初学者而作,望你们能有更好,更多对ASP.NET面向对编程了解与认识. 前一篇中<ASP.NET开发,从二层至三层,至面向对象 (4)>http://w ...

  10. MVC会员注册

    自从写了<数据库数据加密与解密>http://www.cnblogs.com/insus/p/3434735.html.其中也有提及Insus.NET将要在MVC应用程序中实现会员注册的功 ...