• MYSQL优化


    伪哈希技巧

    使用一个函数 crc32($string),能把一个字符串转化为32位整数。

    $checksum = crc32("The quick brown fox jumped over the lazy dog.");
    printf("%u
    ", $checksum);
    
    //2191738434

    把整形数据保存到数据中肯定比直接保存字符串要快得多。

    多列索引时要考虑因数

    查询频率

    列区分度

    列查询顺序

    索引与排序关系

    排序可能发生的两种情况

    • 对索引覆盖,直接在索引查询时就是有序得。在Innodb引擎中,沿着引擎字段排序,自然是有序得。对于Myisam引擎,如果按索引字段排序,如ID,但取出来字段中,有未索引字段,如dede_name,Myisam做法并不是先在索引树上找,在回行,而是先取出所有的行再进行排序。
      先建两张表仅是引擎不同
      create table test_index(
      id int primary key auto_increment,
      name  char(10) not null default ``,
      email  char(10) not null default ``,
      index  c (`id`,`name`)
      ) engine = Innodb charset utf8;
      
      create table test_order(
      id int primary key auto_increment,
      name  char(10) not null default '',
      email  char(10) not null default     '',
      index  c (`id`,`name`)
      ) engine = myisam charset utf8;
    explain  select id , email from test_index order by idG
     
    explain  select * from test_order order by idG

    image

    在实际的开发中是要避免产生filesort文件排序,怎么优化?

    建立联合索引

    使用Innodb引擎

    • 先取出数据,形成临时表,做filesort文件排序(排序时文件可能在磁盘中,也有可能在内存中)。

    重复索引与冗余索引

    重复索引:在同一开裂或者顺序相同的几个列建立多个索引。eg:index c1(id ,name .email), index c2(id ,name)

    冗余索引:多个所以所覆盖的列有重叠,二顺序不同。eg:index c1tag1,tag2)  ,index c2(tag2,tag1)

    重复索引并不会提高查询的效率,这是没有必要的。而冗余索引是可以提高查询的效率,在一定的情况是可提倡。由此可见 索引的顺序是有必要注意得。

    碎片与维护

    在长期的数据更改过程中,索引文件和数据文件都会产生空洞的碎片,因此数据间的间隙增大,所以查询的速度就减慢,那么对表进行修复操作是必要得,修复的周期害的看数据的更新频率。

    image

    可知Innodb是不支持 optimize 这个命令,这个命令仅支持Myisam(optimize table table_name)。 但也可用  alter  table table_name engine =’innodb’,这个命令进行数据的集中优化。

  • 相关阅读:
    Apache 虚拟主机 VirtualHost 配置
    ajax无线级刷新
    Apache中 RewriteRule 规则参数介绍
    用户注册
    用户登录
    Android 侧滑菜单
    PhontoShop CS6 视频
    ArcGis地图
    Android 汉子转换成拼音
    UTF-8 转 GBK
  • 原文地址:https://www.cnblogs.com/webph/p/6552807.html
Copyright © 2020-2023  润新知