性能优化
表的设计合理化,符合三大范式(3NF)
1NF是对属性的原子性约束,要求属性(列)具有原子性,不可再分解;(只要是关系型数据库都满足1NF)
2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;
3NF是对字段冗余性的约束,它要求字段没有冗余。 没有冗余的数据库设计可以做到。
添加适当索引(index) [四种: 普通索引、主键索引、唯一索引unique、全文索引]
较频繁的作为查询条件字段应该创建索引;
唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件;
更新非常频繁的字段不适合创建索引
不会出现在WHERE子句中的字段不该创建索引
分表技术(水平分割、垂直分割);
读写[写: update/delete/add]分离;
存储过程 [模块化编程,可以提高速度];
对mysql配置优化 [配置最大并发数my.ini, 调整缓存大小 ];
mysql服务器硬件升级;
定时的去清除不需要的数据,定时进行碎片整理(MyISAM)。
SQL语句优化
通过show status命令了解各种SQL的执行频率;
定位执行效率较低的SQL语句-(重点select;
通过explain分析低效率的SQL;
确定问题并采取相应的优化措施。
添加索引
索引主要可以分为以下几种:
主键索引,主键自动的为主索引 (类型Primary);
唯一索引 (UNIQUE);
普通索引 (INDEX);
全文索引 (FULLTEXT) [适用于MyISAM] ——》sphinx + 中文分词 coreseek [sphinx 的中文版 ];
综合使用=>复合索引
可能使用到索引
对于创建的多列索引,只要查询条件使用了最左边的列,索引一般就会被使用。
对于使用like的查询,查询如果是 ‘%aaa’ 不会使用到索引, ‘aaa%’ 会使用到索引。
不使用索引
如果条件中有or,即使其中有条件带索引也不会使用。
对于多列索引,不是使用的第一部分,则不会使用索引。
like查询是以%开头
如果列类型是字符串,那一定要在条件中将数据使用引号引用起来。否则不使用索引。(添加时,字符串必须’’)
如果mysql估计使用全表扫描要比使用索引快,则不使用索引。
网友评论