MySQL基础学习笔记——数据库优化(2):SQL查询优化

数据库优化

SQL查询优化

  1. 避免全表扫描,应该考虑在whereorder by涉及的列上建立索引

  2. 查询时使用select明确指明所要查询的字段,避免使用select *keys *flushdb等)的操作;

  3. SQL语句尽量大写,如:

    SELECT name FROM t WHERE id=1;

  • 对于小写的SQL语句,通常数据在解析SQL语句时,通常会先转化成大写再执行。
  1. 尽量避免where子句中使用!=<>操作符,MySQL只有对以下操作符才使用索引<<==>>=BETWEENIN,以及某些时候的LIKE

    SELECT id FROM t WHERE name LIKE 'abc%';

  2. 对于模糊查询,

    SELECT id FROM t WHERE name LIKE '%abc%'; // 或者 SELECT id FROM t WHERE name LIKE '%abc'

将导致全表扫描,应避免使用,若要提高效率,可以考虑全文检索;

  1. 遵循最左原则,在where子句中写查询条件时把索引字段放在前面,如:

    // mobile为索引字段,name为非索引字段 // 推荐 SELECT ... FROM t WHERE mobile='1391111111' AND name='gyhs'; // 不推荐 SELECT ... FROM t WHERE name='gyhs' AND mobile='13911111111';

    // 建立了复合索引key(a, b, c) // 推荐 SELECT ... FROM t WHERE a=... AND b=... AND c=... SELECT ... FROM t WHERE a=... AND b=... SELECT ... FROM t WHERE a=... // 不推荐 SELECT ... FROM t WHERE b=... AND c=... SELECT ... FROM t WHERE b=... AND a=... AND c=... ...

  2. 能使用关联查询解决的尽量不要使用子查询,如:

    // 子查询 SELECT article_id, title FROM t_article WHERE user_id IN (SELECT user_id FROM t_user WHERE user_name IN('yangmi','tanyan','dilireba')) // 关联查询(推荐) SELECT b.article_id, b.title FROM t_user AS a INNER JOIN t_article AS b ON a.user_id=b.user_id WHERE a.user_name IN ('yangmi', 'tangyan', 'dilierba')

能不使用关联查询的尽量不要使用关联查询

  1. 不需要获取全表数据的时候,不要查询全表数据,使用LIMIT来限制数据。
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

sql注入

反引号是个比较特别的字符,下面记录下怎么利用0x00SQL注入反引号可利用在分隔符及注释作用,不过使用范围只于表名、数据库名、字段名、起别名这些场景,下面具体说下1)表名payload:select\from\users\whereuser\_id1limit0,1;!(https://o

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

常见SQL编写和优化

常见的SQL优化方式1.对查询进行优化,应尽量避免全表扫描,首先应考虑在where及orderby涉及的列上建立索引。2.应尽量避免在where子句中对字段进行null值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:selectidfromtwherenumisnul