首页 > 数据库 >SQL 优化

SQL 优化

时间:2022-09-22 22:34:38浏览次数:49  
标签:index force exists SQL 索引 使用 优化

1)基本写法优化

  1. 少使用select *,尽量使用具体字段;
  2. 对于条件来说等号之类两边的字段类型要一致,字符串不加单引号索引会失效;
  3. 对于条件来说后面少使用函数或者算数运算;
  4. 对于group by语句要先过滤后分组;
  5. 在查询时减少使用null,所有字段需添加默认值;
  6. 少使用like,对于需要使用的, 如需要使用尽量用like abc%这种,不要把%放字段前面;
  7. 去除的distinct过滤字段要少,避免distinct *
  8. 不要超过 5 个以上的表连接;

2)建立使用合适索引

  1. 对于高频筛选字段可以适当的建立索引;
  2. 一个表的索引最好不要超过5个,多了会影响插入修改速度;
  3. 对于需要多个字段进行排序的可以使用组合索引;
  4. 使用组合索引一定要遵守最左原则;
  5. 不要对值是有限重复的字段建立索引,如性别等;
  6. 使用explain查看SQL是否命中索引;

3)替代优化

  1. 对于existsin需遵守小表驱动大表,exists需要外表小,in则需要内表小;
  2. 不要使用not in<>,这个会破坏索引,not in可以用not exists来代替,<> 可以分成两个条件>或者<等;
  3. 使用连接查询代替子查询;

4) 特殊优化

  1. 强制索引 force index(<索引名>)
    MySQL 可能会选择错索引,我们可以通过 force index 进行矫正
    例句:
select * from order_info force index(idx_period) where period = 202208 order by modified desc limit 0, 10;

标签:index,force,exists,SQL,索引,使用,优化
From: https://www.cnblogs.com/revil/p/16721068.html

相关文章

  • sql练习--查找山东大学或者性别为男生的信息
    描述题目:现在运营想要分别查看学校为山东大学或者性别为男性的用户的device_id、gender、age和gpa数据,请取出相应结果,结果不去重。 示例:user_profileiddevice_i......
  • 牛客网-SQL专项训练20
    ①学生、书店和图书三个实体集之间的联系属于:多元联系。解析:参与联系的实体集个数大于2个时,为多元联系;这里学生、书店、图书是三个实体,为多元联系。二元联系指只有两个......
  • MySQL及MySQL Workbench下载与安装
     安装MySQLWorkbench参考链接:https://blog.csdn.net/qq_51813155/article/details/121705128一、下载MSI文件下载地址:https://dev.mysql.com/downloads/workbench/......
  • Flask 学习-73.Flask-SQLAlchemy 分页查询paginate
    前言Flask-SQLAlchemy提供了一个分页查询方法paginate(),方便我们实现在后端查询分页。分页查询在django框架里面有个rest_framework.pagination分页器,只需简单的配......
  • Django ORM 事务和查询优化
    一、事务操作模块fromdjango.dbimporttransaction1开启事务:withtransaction.atomic()fromdjango.dbimporttransactionclassMyView(View):defpost(sel......
  • 【SQL Server】 两张相同字段的表拼接(Union)
    SELECTdate,name,code,times,times1FROM((SELECTt1.date,t1.NAME,t1.CODE,t1.times,t2.......
  • MySQL日期类型介绍及格式化
    1、MySQL中常用的几种时间类型有:date、datetime、time、year、timestamp数据类型占用字节最小值最大值零值表示备注date41000-01-019999-12-310000-00-0......
  • MySQL InnoDB 锁的二三事
    近日, 在一个小型项目中, 遇到了一个触及我知识盲区的bug. 项目用的是MySQL5.7.25, 其中有一张表 config_data,包含四个字段,id,name,value,expireAt.其中id......
  • 脚本二进制编译安装Mysql
    mysql二进制安装脚本部署目录mysql二进制安装脚本部署单实例使用函数的单实例使用函数的单实例或者多实例单实例[root@localhost~]#mkdirmysql//创建存......
  • centos6创建mysql开机自启动
    环境:OS:centos6db:5.6.40 1.修改/etc/init.d/mysqld文件,默认文件以及存在,该文件内容如下:#!/bin/sh#CopyrightAbandoned1996TCXDataKonsultAB&MontyPro......