MYSQL小结

一、mysql innodb存储引擎的特点:

1,支持事务(OLTP);

2,高并发(MVCC);

3,行锁;

4,外键;

5,非锁定读;

二、伪列、分页

1、ROWID,如果数据库表没有设置主键,innodb会自动添加rowid主键,但是查询不到;如果有主键,则rowid默认等于主键。row_id,oracle的伪列,可以查询出来。
2、limit优化:(limit 10,10   limit 800000,10)

偏移量越大,数据库越慢,执行效率越差

三、索引使用:

1,谨慎使用索引,一般建议一张表上建2-3个索引为最好;

2,不在索引列做运算,索引列上不能使用函数,否则索引失效;

3,使用正确的数据类型去查询;

4,字符字段考虑使用前缀索引

5,不使用外键;额外开销,高并发的时候容易引起死锁;

5,创建复合索引时,将等值连接的列放在前面,一个范围连接的列放最后面

6,查询时类型不匹配,不走索引,相当于全表扫描;

7,like查询左边有%,不走索引;

8,排序会把sql的执行,及用到的索引给打乱,甚至不用索引(mysql执行顺序:先排序,再范围,最后索引);

执行计划:

ALL >  index  >  range  >  ref   >  eq_ref  >  const  >  system  >  NULL
四、建表

1,建表必须知道主键、存储引擎和默认字符集,建议主键自增;

2,列的数据类型依据“更小更简单”原则;

3,定长用char,变长用varchar并指定适当的长度;
五、其他

1、开发中不建议使用大字段;
2、数字型  VS  字符串型索引:数字型更高效;查询更快;占用空间更小;

3、UNOIN Unoin all
 Unoin去重,使用union all 效率高
4、同一字段OR改为IN

     不同字段的OR改为Unoin

5、count(*)性能消耗非常大;

 

总结:

尽量不在数据库做运算;

复杂运算移到程序端CPU;

尽可能简单的应用MySQL;

数据库优化主要优化IO;

你可能感兴趣的:(数据库)