• mysql语句优化


    1.设计表格的时选择合适的字段类型
     
    一般来说,数据库中的表越小,在它上面执行的查询就会越快,因此在创建表的时候,为了获取更好的性能,我们可以将表的字段宽度设得尽可能的小。
    1.1.尽可能选择VARCHAR来代替CHAR,但是如果某字段长度已经固定(手机号,邮编等)我们可以使用CHAR(11)来固定字段的长度。同样的整型字段我们我们也应该选择合适长度的类型。
    1.2.对于某些字段(省份,性别等)我们可以选择整型字段来代替文本类型,因为数值型的数据被处理的速度较快
     
    2.使用连接(JOIN)来代替部分子查询
     
    使用子查询可以一次性完成很多逻辑上很多步骤才能完成的SQL操作,同时可以避免事务和表锁死,但是有些情况下可以使用连接代替子查询,因为这样不需要在内存中创建临时表来完成这个查询
    2.1 在使用连接时可将部分数据查询出来后再进行连接
     
    3.使用联合(UNION)来代替手动创建临时表
     
    它可以把需要使用临时表的两条或更多的select查询合并到一个查询中,在客户端结束回话的时间自动删除临时表,要注意所有的select语句中的字段数目要相同
    3.1 尽量避免在查询条件中使用or来连接条件,这样会引擎放弃索引进行全表扫描
    SELECT id FROM SC WHERE id = 10 OR id = 20
    可以选择下面这种
    SELECT id FROM SC WHERE id = 10 UNION
    SELECT id FROM SC WHERE id = 20
      
    4.使用索引
     
    索引是提高数据库性能的常用方法
    4.1 索引应该用于JOIN,WHERE判断和ORDERBY排序的字段上
    4.2 不要对含有大量重复值的字段建立索引,当索引列出现大量重复值的时间,查询可能不回去利用索引
    4.3 应该注意的是建立索引是需要消耗计算机资源的,不要随意建立索引,索引提升select查询效率,但相应的降低了insert和update的效率,因为索引可能会被重新建立
     
    5.优化查询语句
     
    绝大多数情况下,使用索引可以提高查询的速度,但如果SQL语句使用不恰当的话,索引将无法发挥它应有的作用
    5.1 最好在相同类型字段间进行比较操作
    5.2 不要在查询中让字段类型进行自动转换,这样会引擎放弃索引进行全表扫描
    5.3 在建立索引的字段上尽量不要使用函数进行操作,这样会引擎放弃索引进行全表扫描
    5.4 在搜索字符型子串时,我们有时会使用like关键字和通配符,但这样是以牺牲系统性能为代价使做法变简单,部分搜索可以尝试下面的方法
    SELECT `id` FROM books WHERE `name` LIKE "MySQL%"
    SELECT `id` FROM books WHERE `name` >= "MySQL" AND `name` < "MySQM"
    5.5 使用exists代替in是一个好的选择
    5.6 尽量不要使用!=和<>或者对字段进行null判断,这样会引擎放弃索引进行全表扫描
    5.7 不要使用select *,用具体字段代替“*”
    5.8  数据类型出现隐式转换的时候也不会使用索引,特别是当列类型是字符串,那么一定记得在where条件中把字符串常量值用引号引起来,否则即便这个列上有索引,MySQL也不会用到,因为MySQL默认把输入的常量值进行转换以后才进行检索
     
  • 相关阅读:
    MyBatis(六)缓存机制 之 缓存的相关属性设置
    MyBatis(六)缓存机制 之 缓存机制简介
    MyBatis(五)动态SQL 之 批量操作(插入)
    MyBatis(五)动态SQL 之 批量操作(删除)
    MyBatis(六)缓存机制 之 整合第三方缓存
    MyBatis(六)缓存机制 之 二级缓存
    MyBatis(五)动态SQL 之 批量操作(查询)
    MyBatis(六)缓存机制 之 缓存原理图
    MyBatis(六)缓存机制 之 一级缓存
    MyBatis(五)动态SQL 之 批量操作(更新)
  • 原文地址:https://www.cnblogs.com/donghaojun/p/10937494.html
Copyright © 2020-2023  润新知