zoukankan      html  css  js  c++  java
  • MYSQL 优化,持续更新收藏

    先记录自己的经验

    1:就是拆表 基本1G以上的表就考虑删一部分 或者拆开

    3G以上的表就卡得磨人

    2:索引 随便建吧 不行再删

    3:left join inner join right join 还是有些区别

    4:不要innodb innodb有时候秒开 有时候卡的磨人 数据量小的时候还好  数据量大基本无解 

    5:时间上建立索引  就不要用 current interval 1month这些啦

    php算好时间 比如一个月前 是2016-1-1  就直接time>'2016-1-1'

    6 select  id from xxx  where id in (select id from  yyy ) 这种超级卡  最好不要看到这种句子  尽量想办法在xxx表中建立字段 用left join之类也比这个强很多

     

    7:原则上 索引和删表能解决80%的问题  比如订单表 三个月前的删除(移动到历史库)

    8:一些技巧上的

    比如查询条件不要带函数 比如时间带date_format 先自己算好成时间戳再去做条件

    stauts这种 最要不要用string 建议用int  0 1 2 3  数字比字符串快

    9:后端使用上的

    循环里面不要去查询  可以直接用join

    多数情况下group by 能解决大多数问题

    不行就group by 多字段+unionall +contact

    原则上 一条sql 一定比多条sql省时间

    如果这一条很慢 那么多数条件下 是有优化的余地

    10:模型设计上的

    (1)大数据量的表 尽量字段要少 尽量不要去动

    比如网站的全部粉丝表 

    现在突然有一天 要设置其中100个为管理员

    普通做法 100w一下  是加一个字段 比如isadmin 但这样非常不好 很多对管理员的操作模型就会去链接这张极其数据量大的表

    正确做法 应该新建一张管理员表来关联这个粉丝表

    (2)常用的表 不要有大字段 ,分表分表 原则上不要怕表多 字段多才是灾难

    (3)可以考虑innodb  但数据特大的时候就不要去查了 都没优化的余地

    11:某些统计类 日志类的东西 如果特爱去查 最好每天定时去生成 比如留存  

    当然 如果量小 一句sql也可以

    12:善用存储过程  比如某些递归 存储过程还是蛮快的

    下面是网上搜的

    1,开启慢查询

    功能:慢查询log能有效的记录那些查询时间较长的sql语句,便于分析优化

    步骤为在my.ini下面的mysqld下面加入

    log_slow_queries=slowquery.log 
    long_query_time=1 
    slow_query_log=ON 
    log_queries_not_using_indexes=ON

    步骤本来很简单,但可怜的我又折腾了好久,原因是log_slow_queries=slowquery.log这一句我按照网上的步骤

    写成了:'F:wampinmysqlmysql5.5.24dataslowquery.log'这种形式,结果log死活不出来,一个偶然的机会

    一不小心将log_slow_queries这一项的值改成了on,嘿,结果出来了,在data目录下面有一个名为on的log文件

    才知道目录地址应该写重复了,搜索my.ini,发现有一项为

    [wampmysqld]

    datadir=F:/wamp/bin/mysql/mysql5.5.24/data

    所以在wamp下 默认是不需要写前面的路径的

    备注:环境为wamp mysql为mysql5.5.24

    2,具体mysql优化

    方法一:最有效的方法就是建立索引,对于经常查询且值较多的字段,有效的建立索引,查询速度立竿见影,比如id,name这些字段

    ALTER TABLE 表 ADD PRIMARY KEY  (主键列比如id) 主键索引

    ALTER TABLE 表 ADD UNIQUE INDEX uni_email (email) 唯一索引

    ALTER TABLE 表 add index inx_email (email) 普通索引

    alter table 表名 drop index 索引名;     删除索引

    show index from 表名   查询索引

    方法二:  表的分割(水平分割,垂直分割)

    就当数据库的数据太多时,查询起来肯定慢,通过一定规则来分割数据库的表,肯定能有效提高查询速度 百万级以上

    水平分割:比如1000w条数据的表

    分成三个表,结构一样,表明分别为t1 t2 t3(事先这样设计好表比较方便,如果整表设计好了再分割,就自己写点代码来各种insert吧,比较浪费时间而已)

    在增删改查的时候,$tablename这个可以为t.$id%3 这样所有数据会均匀的放到三个表中,当然,目前这是有个自增长id的情况下,比较简单

    垂直分割:比如学生成绩,有id score paper(详细的答案信息)等字段,paper字段多数不看,但也会有小概率会去查询,但此字段最大,明显拖速度

    所以可以将此表分割开来 两张表 一张为id score  一张为id paper   id对应好,那么查询分数的速度会快很多

    方法三:主从分离

    待编辑

    方法四:网络上搜集的小技巧

    (1)使用join代替一些子查询

    (2)少用or ,如果条件中有or,即使其中有条件带索引也不会使用

    (3)

  • 相关阅读:
    PHPStorm下XDebug配置
    HDU 4633 Who's Aunt Zhang (Polya定理+快速幂)
    VC++深入详解-第五章学习心得
    nginx access log logrotate配置
    判断变量是否存在(python)
    一步一步学android之布局管理器——LinearLayout
    向前辈致敬 strspn
    poj 1087 (最大流)
    cocos2d-x Touch 事件应用的一个例子
    [置顶] C#扩展方法 扩你所需
  • 原文地址:https://www.cnblogs.com/dk1988/p/3505116.html
Copyright © 2011-2022 走看看