mysql性能优化

来源:互联网 发布:java框架电子书 编辑:程序博客网 时间:2024/06/15 18:08
  1. 表的设计合理化(3NF)
  2. 添加适当索引(详解)
  3. 分表技术(水平分割 | 垂直分割)
  4. 读写(写:update,delete,add)分离
  5. 存储过程(模块化编程,可以提高速度)
  6. 对mysql 配置优化(配置最大并发数:my.ini,调整缓存大小)
  7. mysql服务器硬件升级
  8. 定时的去清除不需要的数据,定时进行碎片处理《高性能Mysql》

1. 我们的某些查询语句会让Mysql不适用缓存:《》 详解:

2. 当只需要一行数据时,使用Limit 1
例如:查看是否有中国用户:

3. 为搜索字段建立索引
3.1 哪些字段上适合添加索引?
1>较频繁的作为查询条件字段
2>唯一性太差的字段不适合:where sex='男';
3>更新非常频繁的字段不适合 where loginCount = 1;
4>不会出现在where 字句中的字段不应该创建索引
3.2下列的情况不使用索引
1>如果条件中有or,即使其中有条件带索引也不会使用
2>对于多列索引,不是使用的第一部分,索引也不会起作用
3>like查询以%(通配符)开头
4>列类型是字符串,在条件中没有使用引号引用起来
5>如果mysql估计使用全表扫描更快,则不使用索引
4 在join表时使用相同类型的字段并将其索引:
5.避免使用 SELECT *: 需要什么取什么
6.永远为每张表设置一个ID作为主键(int 自增)
除了关联表的外键:这个表的主键通过若干个别的表的主键构成
7.使用ENUM而不是varchar—->tinyint
8.从PROCEDURE ANALYSE()取得建议,要有数据的基础
9.尽可能的使用 not null
10.将IP地址存为 unsigned INT
11.固定长度的表会更快(varchar text blob)
将表分割为一个是定长的,一个是非定长的
12垂直分割技术:
对于用户表来说:只有用户ID,用户名,口令,角色会经常使用
last_login字段,会在用户登录的每一次更新。每次更新都会导致该表的查询缓存被清空,所以将他放到另一个表
被分出去的字段形成的表,不会经常的去join
13.拆分大的DELETE或INSERT语句:因为会锁表,使用LIMIT,更新部分
14越小的列会越快,但要留够足够的扩展空间
15选择正确的存储引擎
myISAM:适合需要大量查询的应用 (更新一个字段,整个表都会被锁)
InnoDB:写操作比较多的,会很优秀,支持行锁和事务


SQL语句优化:
http://database.51cto.com/art/201407/445934.htm###

原创粉丝点击