【MySQL】SQL语句优化
2018-02-27 15:57
399 查看
怎么加快查询速度,优化查询效率,主要原则就是应尽量避免全表扫描,应该考虑在where及order by 涉及的列上建立索引。建立索引不是建的越多越好,原则是:
第一:一个表的索引不是越多越好,也没有一个具体的数字,根据以往的经验,一个表的索引最多不能超过6个,因为索引越多,对update和insert操作也会有性能的影响,涉及到索引的新建和重建操作。
第二:建立索引的方法论为:多数查询经常使用的列;很少进行修改操作的列;索引需要建立在数据差异化大的列上。
利用以上的基础我们讨论一下如何优化sql。
1、sql语句模型结构优化指导
a. ORDER BY + LIMIT组合的索引优化
如果一个SQL语句形如:SELECT [column1],[column2],…. FROMORDER BY [sort] LIMIT [offset],[LIMIT];这个SQL语句优化比较简单,在[sort]这个栏位上建立索引即可。WHERE [columnX] = [VALUE] ORDER BY [sort] LIMIT [offset],[LIMIT];这个语句,如果你仍然采用第一个例子中建立索引的方法,虽然可以用到索引,但是效率不高。更高效的方法是建立一个联合索引(columnX,sort)。WHERE uid=1 ORDER x,y LIMIT 0,10; 对于这个语句,大家可能是加一个这样的索引:(x,y,uid)。但实际上更好的效果是(uid,x,y)。这是由MySQL处理排序的机制造成的。
第一:一个表的索引不是越多越好,也没有一个具体的数字,根据以往的经验,一个表的索引最多不能超过6个,因为索引越多,对update和insert操作也会有性能的影响,涉及到索引的新建和重建操作。
第二:建立索引的方法论为:多数查询经常使用的列;很少进行修改操作的列;索引需要建立在数据差异化大的列上。
利用以上的基础我们讨论一下如何优化sql。
1、sql语句模型结构优化指导
a. ORDER BY + LIMIT组合的索引优化
如果一个SQL语句形如:SELECT [column1],[column2],…. FROM