首页 > 代码库 > MySQL的优化

MySQL的优化

0.mysql 做join连接的字段长度和类型尽量一致。
1.表结构设计原则
2.优化需要优化的query
3。使用explain,profile,慢查询等观察效率
4.用小结果集驱动大的结果集。
5。在索引中排序
6.值取需要的Columns,避免select *
7.使用最有效的过滤条件。
8。用left join代替子查询。
9.建立合适的索引,多列索引,

1.1:表结构的设计
  1.选择合适的数据类型,如果能定长尽量定长
  2.不要使用无法加索引的字段,如text
  3.避免联表查询,一些常用不变的字段可以直接写在表中
  4.选择合适的引擎,不需要事务的尽量用myisam,大量查询少量写操作的用myisam,相反用InnoDB
  5。每个表都要有自增主键,建立适当索引
  6.给每个字段设置默认值
2.1:优化需要优化的query
  需要优化的query指,经常频繁被执行的SQL,通过慢查询得到的时间较长的语句
3.1:使用explain,profile,慢查询等观察效率
4.1:用小结果集驱动大的结果集。
  大表经过where条件过滤后返回的结果并不一定比小表所返回的结果大,可能会更小,这个时候扔采用小表驱动大表会得到相反的结果
5.1:在索引中排序
  如,在分类为class=5的楼市新闻中有200万条新闻,这个时候按时间date排序如果将class和date建立联合索引,则在生产索引时会自动给date排序,效率会提高。
6.1:值取需要的Columns,避免select *
7.1使用最有效的过滤条件。
  避免使用包含的条件,如in
8.1用left join代替子查询。
  子查询无法使用索引,效率相当差
9.1建立合适的索引,多列索引,
  针对性的建立索引,像性别、状态等无需建立索引
  尽量使用短索引,一般针对int、char、varchar、date、time等类型建立索引
  尽量建立多列索引,多列索引的最后一个字段常是时间等order by用到的字段,而前几个字段是where中=的条件,如果是in <>等将不会用索引

其他优化:
  将text、varchar字段分离,由于对索引字段查询比较频繁,分离成静态表可以加速查询
  避免使用MySQL自带函数,使用的话可能用不了索引,结果不会被缓存
  拆分大的 DELETE 或 INSERT 语句,避免出现锁表