mysql and 优化_MYSQL优化

伪哈希技巧

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

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

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

多列索引时要考虑因数

查询频率

列区分度

列查询顺序

索引与排序关系

排序可能发生的两种情况

对索引覆盖,直接在索引查询时就是有序得。在Innodb引擎中,沿着引擎字段排序,自然是有序得。对于Myisam引擎,如果按索引字段排序,如ID,但取出来字段中,有未索引字段,如dede_name,Myisam做法并不是先在索引树上找,在回行,而是先取出所有的行再进行排序。

先建两张表仅是引擎不同

create table test_index(

id int primarykey 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 primarykey 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 id\Gexplain select * from test_order order by id\G

2ce5f54de9423bd25e97704ed3c049aa.png

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

建立联合索引

使用Innodb引擎

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

重复索引与冗余索引

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

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

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

碎片与维护

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

0ddbbfc373a4a21c8e917d3f360db13a.png

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值