zoukankan      html  css  js  c++  java
  • Mysql使用优化之处(转)

    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.

  • 相关阅读:
    Part 3:视图和模板--Django从入门到精通系列教程
    Part 2:模型与后台管理admin站点--Django从入门到精通系列教程
    Part 1:请求与响应--Django从入门到精通系列教程
    java的static关键字
    接口
    final关键字
    抽象类
    动态绑定多态
    对象转型2
    对象转型1
  • 原文地址:https://www.cnblogs.com/jaejaking/p/5379089.html
Copyright © 2011-2022 走看看