谭兄

导航

 

 

apache默认最大并发连接是150个, mysql默认最大并发连接为100个,可动态调整

 

常用的缓存技术 : 磁盘缓存(页面静态化), 内存缓存(redis, memcached, mysql的memory引擎)

 

索引类型

主键索引:一个表中只能有1个,可以多列,效率高。

唯一索引:如果没有制定not null,则该列可以为空,同事可以有多个null

普通索引

全文索引:mysql5.5不支持中文,同时要求存储引擎是myisam, 如果希望支持中文 1.sphinx中文版coreseek,2.插件mysqlcft

空间索引

 

1.数据库设计

一般需要满足三范式

 合适的存储引擎

优化数据字段类型 

2.sql语句优化

定位执行效率较低的sql语句(重点是select)             

Show variables like 'long_query_time';
set long_query_time=2     修改为2秒

通过explain分析

explain select *from emp where ename = '张三';

确定问题并采取优化措施

 

建立索引

1.频繁作为查询条件的字段应该创建索引 (唯一性太差和更新频繁的不适合)

2.不会出现在where子句中的字段不该创建索引

代价:占用磁盘空间,对update,insert,delete速度有影响。

 

几种情况:

1.多列索引, 只要查询条件用到了最左边的列, 索引一般会被使用

2.对于like查询, '%aaa'不会使用索引,   'aaa%'会使用索引, 以%开头不会使用索引

3.条件中有or, 则要求or的所有字段都必须有索引, 否则不能用索引

4.多列索引, 如果不使用第一部分, 则都不会使用

5.如果列类型是字符串, 字符串必须加引号, 否则不使用索引

6.如果mysql估计全表扫描比使用索引快, 则不会用.

7. 如果查询中包括group by 但用户想要避免排序结果的消耗, 则可以使用order by null禁止排序

8.尽量不用子查询,考虑使用join处理

 

分表技术

当一张表越来越大, 即使添加索引还慢的话, 可以考虑分表技术

水平切分, 将记录散列到不同的表中,各表的结构完全相同,每次从分表中查询, 提高效率

垂直切分, 将表中大字段单独拆分到另外一张表, 形成一对一的关系

 

分区技术

海量数据分割到不同磁盘,提高性能

 

 

3.数据库参数配置

innodb_additional_mem_pool_size  内存池 大小, 默认为8M,数据库中的表数量越多,参数值应该越大,如果 InnoDB 用完了内存池中的内存,就会从操作系统中分配内存,同时在 error log 中打入报警信息

innodb-buffer-pool-size  缓冲池大小

对于myisam, 需要调整 keu_buffer_size

 

4.硬件资源和操作系统恰当

 

这四个顺序也表现了对性能影响的大小

posted on 2017-03-13 10:47  谭兄  阅读(197)  评论(0编辑  收藏  举报