Mysql优化

来源:互联网 发布:手机淘宝怎么刷新 编辑:程序博客网 时间:2024/06/01 07:31

 

本质上讲


 1.减少 IO 次数
  IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当然,也是收效最明显的优化手段。
 
 2.降低 CPU 计算
  除了 IO 瓶颈之外,SQL优化中需要考虑的就是 CPU 运算量的优化了。order by, group by,distinct … 都是消耗 CPU 的大户(这些操作基本上都是 CPU 处理内存中的数据比较运算)。当我们的 IO 优化做到一定阶段之后,降低 CPU 计算也就成为了我们 SQL 优化的重要目标。


1.最开始 存数据 写应用程序

我们是取一个字段还是多个字段,实际上数据库在表中需要访问的数据量其实是一样的。例子:
select * from t 等价于 select a,b,c from t 。 注意:加索引就不一样了 所以尽量写成 你需要查询的字段 尤其查询的数据仅仅是索引字段时。

大多数关系型数据库都是按照行(row)的方式存储,而数据存取操作都是以一个固定大小的IO单元(被称作  block 或者 page)为单位,一般为4KB,8KB… 大多数时候,每个IO单元中存储了多行,每行都是存储了该行的所有字段(lob等特殊类型字段除外)。

2.然后,当数据量大了,查询太慢,我们需要优化数据库 首先分析

使用--log-slow-queries –long-query-time=2查看查询比较慢的语句。然后使用**explain**分析查询,做出优化。
MySQL> explain select * from t_online_group_records where UNIX_TIMESTAMP(gre_updatetime) > 123456789;+----+-------------+------------------------+------+---------------+------+---------+------+------+-------------+| id | select_type | table                  | type | possible_keys | key  | key_len | ref  | rows | Extra       |+----+-------------+------------------------+------+---------------+------+---------+------+------+-------------+|  1 | SIMPLE      | t_online_group_records | ALL  | NULL          | NULL | NULL    | NULL |   47 | Using where |+----+-------------+------------------------+------+---------------+------+---------+------+------+-------------+1 row in set (0.00 sec)

如上面例子所示,重点关注下type,rows ,Extra
type:使用类别,有无使用到索引。结果值从好到坏:const… > range(使用到索引) > index > ALL(全表扫描),一般查询应达到range级别 const代表一次命中
rows:SQL执行检查的记录数
Extra:SQL执行的附加信息,如”Using index”表示查询只用到索引列,不需要去读表等

3.加索引

索引的类型

1.UNIQUE 唯一索引
不可以出现相同的值,可以有NULL值

2.INDEX普通索引
允许出现相同的索引内容

3.PRIMARY KEY主键索引
不允许出现相同的值,且不能为NULL值,一个表只能有一个primary_key索引

4.fulltext index 全文索引
上述三种索引都是针对列的值发挥作用,但全文索引,可以针对值中的某个单词,比如一篇文章中的某个词, 然而并没有什么卵用,因为只有myisam以及英文支持,并且效率让人不敢恭维,但是可以用coreseek和xunsearch等第三方应用来完成这个需求

建立方式1. sql 2. 工具直接添加 
0 0
原创粉丝点击