MySQL中使用的SQL优化手段
原创SQL有很多方法可以进行优化,对于通常的情况可以概括为几种:
可以通过本文中的语句添加以下表格和数据:
1.有索引且未使用:
1、 Like通配符的参数%开始时,数据库引擎放弃使用索引进行全表扫描。
以通配符开头 sql语句,是全表扫描,不使用索引,不建议:
explain select * from teacher where tname like %10;
不以通配符开头 sql使用索引的语句是一系列查找:
explain select * from teacher where tname like 10%;
2、where条件不符合最左边的原则:
假设有这样一个索引--(a,b,c),则必须使用第一个字段a,将转到索引。否则,select * from table where b=b and c=c,则不会使用该索引。
3、索引列 使用 ! = 或 <> 操作员, 数据库引擎放弃使用索引进行全表扫描。使用 > 或 < 会更有效率。
4、 在 where 索引列在子句中表示,这会导致引擎放弃索引并扫描整个表。
5、 在 where 子句中的索引列。 null 值判断,则引擎放弃使用索引进行全表扫描。
如: 低效: select * from teacher where note is null ;
可以在note 将缺省值设置为0,确保该表note 列没有null 值,然后按如下方式查询:
高效:select * from teacher where note= 0;
6、 在 where 用在从句中 or 连接条件,导致引擎放弃使用索引进行全表扫描。
如: 低效:select * from teacher where note = 12 or note = 122;
您可以将上面的内容替换为如下查询 or 查询:
高效:select from teacher where note = 12 union all select from teacher where note = 122;
或者:select * from teacher where note in (12, 122);
二、 避免 **select ***
在解析过程中, * 这是通过查询数据字典来完成的,这意味着需要更多时间。因此,一个人应该养成随心所欲的好习惯。
三、 order by 语句优化
任何在Order by 语句或计算表达式的非索引项将减慢查询速度。
方法:
- 重写 order by 语句以使用索引;
2.为order by使用的列创建了另一个索引。;
3.绝对避税 order by 用在从句中表达式。
四、 GROUP BY 语句优化
提高 GROUP BY 报表的效率 , 可以通过将不需要的记录放入 GROUP BY 之前被过滤掉了。
--低效:
select c_id, sum(score) from sc where group by c_id having score > 100;
--高效:
select c_id, sum(score) from sc where score > 100 group by c_id ;
五、 使用 varchar/nvarchar 代替 char/nchar
尽可能多地使用 varchar/nvarchar 代替 char/nchar 因为首先,较长字段的存储空间较小,可以节省存储空间。其次,对于查询,在相对较小的领域内的搜索效率明显较高。
六、 能用 DISTINCT 的就不用 GROUP BY
select c_id from sc where score > 100 group by c_id
可改为:
select distinct c_id from sc where score > 100
七、 能用 UNION ALL 就不要用 UNION
UNION ALL 不执行 SELECT DISTINCT 函数,减少了大量不必要的资源。
八、 在 Join 该表使用了一个类似类型的示例,并对其进行了索引。
如果应用程序有多个JOIN 查询时,应确认这两个表。 Join 这些字段已编入索引。就这样, MySQL 内部将为您启动优化 Join 的 SQL声明的机制。 此外,这些都是用来Join应该是同一类型的。例如,如果您想要将 DECIMAL 字段和一个 INT 字段Join在一起,MySQL不能使用它们的索引。对于那些STRING类型,您还需要具有相同的字符集。(两个表格的字符集可能不同)
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除