MySQL优化
- 表关联查询时务必遵循小表驱动大表的原则。
- 使用查询语句where条件的时候,不允许出现函数,否则索引会失效。
- 使用单表查询的时候,相同的字段不要用or,因为使用OR可能会导致索引失效。,但是可以使用union替代。
- 模糊查询的时候,尽量不要使用%开头,否则索引失效。
- 组合索引使用的时候,需要按照从左到右的顺序来使用,否则是失效。
- 索引不宜过多,应该根据实际情况而定。(一般不超过十个)
- 每张表必须要有主键,达到加快查询的效率。
- 分表,可根据业务字段尾随中的个位或十位或百位做表名达到分表的目的。
- 分库,可根据业务字段的尾数的个位或十位或百位做库名达到分库的目的。
- 表分区,类似硬盘分区,可以将某个时间段的数据存放到分区里,加快查询速度,可以配合分表+表分区结合使用。
神奇EXPLAIN语句
EXPLAIN显示了查询语句中的索引使用情况 ,这样可以根据索引的使用情况来优化sql。
id: SELECT识别符号。这里是SELECT的查询序列号。
select_type: SELECT类型,可以使一下的任何一种。
- SIMPLE:简单的SELECT(不使用UNION查询)
- PRIMAEY: 最外面的SELECT.
- UNION:UNION中的第二个或后边的SELECT语句。
- DEPENDENT UNION:UNION中的第二个或后边的SELECT语句,取决于外边的查询。
- UNION RESULT: UNION的结果。
- SUBQUERY :子查询的第一个SELECT。
- DEPENDENT SUBQUERY:子查询中的第一个SELECT取决于外面的查询。
- DERIVED:导出表的SELECT。
table: 输出行所用的表。
partitions: 表分区。
type: 连接类型。