1、尽量不要留null

select id from t where num is null,可以,但尽量不要留null,null也占空间;使用not null填充数据库,像varchar(100)这种变长字段可以设置默认值为0,确保列中没有null值,查询select id from where num=0。

意思就是数据表中一个字段的长度不要设置成null;即便没有值,值的长度可以设置成0。

2、以小查大

如:select * from admin left join log on admin.admin_id = log.admin_id where log.admin_id>10;

解释:这是两张表关联【admin表、log表】

此时就是查询admin表和log表内,当log.admin_id>10时,admin.admin_id = log.admin_id的所有数据;

很明显log.admin_id>10这个条件比较明确,范围小,先查它;

所以可以优化为:

select * from (select * from admin where admin_id>10) T1 left join log on T1.admin_id = log.admin_id

解释:使用 JOIN 时候,应该用小的结果驱动大的结果(left join 左边表结果尽量小如果有条件应该放到左边先处理,

right join 同理反向),同时尽量把牵涉到多表联合的查询拆分多个 query(多个连表查询效率低,容易到之后锁表和阻塞)。

3、 limit 的基数比较大时使用

例如:select * from admin order by admin_id limit 100000,10;

解释:这是查询admin这张表里admin_id从100000开始查,查10条的数据。

但是,limit在数据库是从头开始依次往后查,查的时候找到第100000条,再往后查10条。

优化为:select * from admin where admin_id between 100000 and 100010 order by admin_id;

解释:加上between and就是确定了admin_id的范围是(100000-100010),所以查的比较快一点。

4、尽量避免在列上做运算,这样导致索引失效

例如:select * from admin where year(admin_time)>2020

解释:这是查询admin表的year这个属性,查询有哪些信息的年份大于2020年。

优化为:select * from admin where admin_time> '2020-01-01′

解释:这个语句直接查询了dmin表里的admin_time> '2020-01-01′的所有信息,更加的准确。

MYSQL索引类型

MYSQL索引有四种PRIMARY、INDEX、UNIQUE、FULLTEXT, 其中PRIMARY、INDEX、UNIQUE是一类,FULLTEXT是一类。

PRIMARY:主键索引。索引列唯一且不能为空;一张表只能有一个主键索引(主键索引通常在建表的时候就指定)

NORMAL:普通索引。索引列没有任何限制;

UNIQUE:唯一索引。索引列的值必须是唯一的,但允许有空;

FULLTEXT:全文搜索的索引。FULLTEXT 用于搜索很长一篇文章的时候,效果最好

备注:好些还没搞懂,也是一知半解的,以后继续整理。有想法可以写在评论区。

Mysql数据库优化(1)的更多相关文章

  1. 关于MySQL数据库优化的部分整理

    在之前我写过一篇关于这个方面的文章 <[原创]为什么使用数据索引能提高效率?(本文针对mysql进行概述)(更新)> 这次,主要侧重点讲下两种常用存储引擎. 我们一般从两个方面进行MySQ ...

  2. 【MySQL】花10分钟阅读下MySQL数据库优化总结

    1.花10分钟阅读下MySQL数据库优化总结http://www.kuqin.com2.扩展阅读:数据库三范式http://www.cnblogs.com3.my.ini--->C:\Progr ...

  3. 30多条mysql数据库优化方法,千万级数据库记录查询轻松解决(转载)

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

  4. 50多条mysql数据库优化建议

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 缺省情况下建立的索引是非群集索引,但有时它并不是最佳的.在非群集索引下,数据在物理上随机存 ...

  5. 解开发者之痛:中国移动MySQL数据库优化最佳实践(转)

    开源数据库MySQL比较容易碰到性能瓶颈,为此经常需要对MySQL数据库进行优化,而MySQL数据库优化需要运维DBA与相关开发共同参与,其中MySQL参数及服务器配置优化主要由运维DBA完成,开发则 ...

  6. 30多条mysql数据库优化方法【转】

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

  7. 百万行mysql数据库优化和10G大文件上传方案

    百万行mysql数据库优化和10G大文件上传方案 最近这几天正在忙这个优化的方案,一直没时间耍,忙碌了一段时间终于还是拿下了这个项目?项目中不要每次都把程序上的问题,让mysql数据库来承担,它只是个 ...

  8. 从运维角度来分析mysql数据库优化的一些关键点【转】

    概述 一个成熟的数据库架构并不是一开始设计就具备高可用.高伸缩等特性的,它是随着用户量的增加,基础架构才逐渐完善. 1.数据库表设计 项目立项后,开发部根据产品部需求开发项目,开发工程师工作其中一部分 ...

  9. 关于mysql数据库优化

    关于mysql数据库优化 以我之愚见,数据库的优化在于优化存储和查询速度 目前主要的优化我认为是优化查询速度,查询速度快了,提高了用户的体验 我认为优化主要从两方面进行考虑, 优化数据库对象, 优化s ...

  10. mysql数据库优化 pt-query-digest使用

    mysql数据库优化 pt-query-digest使用 一.pt-query-digest工具简介 pt-query-digest是用于分析 mysql慢查询的一个工具,它可以分析binlog.Ge ...

随机推荐

  1. docker基本操作和部署

    #安装所需的软件包.yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data ...

  2. CG-CTF 签到

    int __cdecl sub_401340(unsigned __int8 *a1) { int v2; // [esp+18h] [ebp-D0h] int v3; // [esp+1Ch] [e ...

  3. 【故障公告】redis 服务器宕机引发博客站点故障

    非常抱歉,今天下午 17:10~17:40 左右,由于博客系统所使用的 redis 服务器宕机,造成博客站点无法正常访问,由此给您带来很大的麻烦,请您谅解. 我们会针对这次故障改进 redis 服务器 ...

  4. python使用笔记008-模块

    模块的原理: 1.就是一个python文件 2.标准模块是python自带的 3.第三方模块需要自己安装 导入模块的顺序: 1.从当前目录下找 2.从python的环境变量中找 一.自己定义的模块 1 ...

  5. Linux常用命令 day day up系列2

    一.alias--设置别名二.du--统计目录及文件空间占用情况三.mkdir--创建新目录四.touch--创建空文件五.ln--创建链接文件1.链接文件类型六.cp--复制文件或目录七.rm--删 ...

  6. UI作品评审总结:切忌过度设计,注意设计闭环

    本期,我们一起看看学长认证模块--UI同学的作品评审.   拿好小板凳,做好笔记,我们开始吧!     我们拿了两个典型的作品进行了一个讲解,做的特色都还不错,但是都有些小问题.   先来看一下第一位 ...

  7. 【LeetCode】974. 和可被 K 整除的子数组

    974. 和可被 K 整除的子数组 知识点:数组:前缀和: 题目描述 给定一个整数数组 A,返回其中元素之和可被 K 整除的(连续.非空)子数组的数目. 示例 输入:A = [4,5,0,-2,-3, ...

  8. ajax请求对返回数据data的处理

    1,ajax请求会根据响应头的返回数据类型对返回的数据data变量进行不同的处理 $.get("data/user-permission-submit-" + ddo.manipu ...

  9. 深入GraphQL 的使用语法

    深入GraphQL 的使用语法 对于GraphQL 的使用语法在上一节中已经大概介绍了基本的使用方式了,这一篇将会对上一篇入门做拓展,努力将所有的使用语法都覆盖到. 1. 终端语法 首先是介绍在前端查 ...

  10. Lniux上的tomcat部署web项目路径问题

    一.项目路径及部署.启动位置 1.在tomcat下部署应用,部署路径:一般直接部署在tomcat/webapps/ROOT下即可.2.默认访问路径:tomcat的默认访问路径为webapps/ROOT ...