zoukankan      html  css  js  c++  java
  • 关于MYSQL优化(持续更新)

    *利用MYSQL数据缓存提高效率,注意事项:

      1.应用环境:不经常改变的表及对此表相同的查询

      2.不适用于服务器端编写的语句

      3.根据数据使用频率,合理分解表

      4.合理使用默认条件,提高命中率

      5.统一SQL语句编写规范,因为MYSQL解析时区分大小写

      6.增加服务器缓存空间

    *为查询缓存,优化查询语句:

    // 查询缓存不开启 
    $r = mysql_query("SELECT username FROM user WHERE signup_date >= CURDATE()"); 
    
    // 开启查询缓存 
    $today = date("Y-m-d"); 
    $r = mysql_query("SELECT username FROM user WHERE signup_date >= '$today'"); 
    

    用变量代替MYSQL函数,开启缓存

    *EXPLAIN你的SQL语句,分析查询效率

    *只要一行数据时,使用LIMIT 1

    *为不经常添加修改,又经常查询的字段,添加索引

      很蛋疼的一件事,自行衡量是否添加

    *JOIN表的时候,使用相同类型的列,STRING类型,两表字符集要一致

    *不使用 ORDER BY RAND(),性能会指数级下降

    // 千万不要这样做: 
    $r = mysql_query("SELECT username FROM user ORDER BY RAND() LIMIT 1"); 
    
    // 这要会更好: 
    $r = mysql_query("SELECT count(*) FROM user"); 
    $d = mysql_fetch_row($r); 
    $rand = mt_rand(0,$d[0] - 1); 
    
    $r = mysql_query("SELECT username FROM user LIMIT $rand, 1");
    

    *避免SELECT *,应该用什么取什么,会导致速度变慢及网络负载加重

    *使用VARCHAR类型当主键会降低性能,永远为每张表设置ID,最好为INT型(推荐UNSIGNED),并自增

    *为有限取值的列使用ENUM

    *选择性使用PROCEDURE ANALYSE()建议

    *尽可能使用NOT NULL

    *把IP地址存成UNSIGNED INT

    *固定长度的表会更快

    *垂直分割,注意分出去的表不经常被JOIN,否则性能会级数下降

    *拆分大的DELETE 或 INSERT

    *越小的列会越快,比如仅几条数据的主键可采用SMALLINT、TINYINT

    *选择正确的存储引擎

  • 相关阅读:
    设计模式之代理模式
    Java面试总结系列之Collections.sort()
    Scala基础
    Win7 电脑设置临时网络,无法加入网络;internet禁止网络共享
    Java面试题系列 提高Java I/O 性能
    电子商务中:B2C、B2B、C2B、C2C、O2O、P2P
    JVM内存格局总结
    Dubbo相关博文整理
    Java面试题汇总(一)
    Java多线程总结
  • 原文地址:https://www.cnblogs.com/feiblog/p/4198145.html
Copyright © 2011-2022 走看看