首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【MySQL】执行计划 explain 及 一条select语句MySQL的奇幻之旅

文章目录 示例 解释 一条select语句MySQL的奇幻之旅 示例 explain select * from emp; 解释 列(Column) 含义(Meaning) id The SELECT...identifier(每个select子句的标识id) select_type The SELECT type(select语句的类型) table The table for the output...以下排序从最优到最差: system:表内只有一行数据 const:最多只会有一条记录匹配,常用于主键或者唯一索引为条件查询 eq_ref:当连接使用的索引为主键唯一时会出现 ref:使用普通索引=或...语句为value IN (SELECT primary_key FROM single_table WHERE some_expr) index_subquery:子查询的返回结果字段组合是一个索引(...:对数据使用一个外部的索引排序 Using index condition:使用了索引下推 一条select语句MySQL的奇幻之旅 注:MySQL8.0起以取消图中第九步(查询缓存)原因:把查询语句作为

1.2K20

MySQL编程规范

基础规范 使用InnoDB存储引擎 表字符集默认使用UTF8,如果涉及到用户输入应当校验字符范围,emoji需要使用UTF8MB4 所有表都需要添加注释 单表数据量建议控制5000W以内 不在数据库存储图...多条字段重复的语句,要修改语句条件字段的顺序,为其建立一条联合索引,减少索引数量 能使用唯一索引就要使用唯一索引,提高查询效率 研发要经常使用explain,如果发现索引选择性差,必须让他们学会使用hint...避免在数据库中进⾏数学运算(MySQL不擅长数学运算逻辑判断) 不要用select *,查询哪几个字段select 这几个字段 SQL中使用到‘or’的改写为用‘in’,‘or’的效率没有‘in’的效率高...SQL语句中,禁止使用前缀是%的like 使⽤预编译语句,只传参数,比传递SQL语句更高效;一次解析,多次使用;降低SQL注入概率 禁止使⽤‘order by rand()’ SQL避免出现now(...数据字段信息 1 数值类型字段 类型 字节(byte) 最小值 最大值 TINYINT 1 -128 127 无符号 0 255 SMALLINT 2 -32768 32767 无符号 0 65535

1.5K10
您找到你想要的搜索结果了吗?
是的
没有找到

六千字带你快速上手操作MySQL

from 表名 where 判断条件 删除数据方法二 删除整个表的所有记录 truncate table 表名 DQL查询 概念 语法 查询语句方法 在数据库查询符合条件的数据 SELECT 字段列表...min() 返回某字段最小值 sum() 返回某字段的总和 常勇字符串函数 函数名 作用 举例 concat(STR1,STR2) 连接字符串str1,str2为一个完整的字符串 select concat...返回:2021-3-5-15-39-45 week(date) 返回日期date为一年的第几周 SELECT WEEK(NOW());返回9 year(date) 返回日期date的年份 SELECT...返回0~1的随机数 SELECT RAND();返回0.86 innot in 子查询 IN 子查询 ​ 问题: mysql中档当子查询跟随=,!...//小括号,再来一次查询,作为一个条件,来与条件1判断 NOT IN 子查询 问题:如果我们想要获得与in子查询相反的结果, 解决方案:不需要去进行过多的代码操作,只需要在代码的 in 前加一个

86820

推荐学Java——数据表操作

自然主键(推荐使用,主键尽量不要和业务数据挂钩) 业务主键(比如用学号做主键,一单业务有变化,主键相关表可能就会有问题) 外键约束:foreign key 一张表的某个字段另外一张表中被标记为外键约束...表名列名(字段名)都属于标识符。 复制表(了解即可) create table 表名 as select * from 已存在的表名; 这样原表的数据也会保留。...mySQL的日期格式: %Y年 %m 月 %d 日 %h 时 %m 分 %s 秒 str_to_date('日期字符串','日期格式') 比如数据表员工的入职日期字段 hiredate 的类型是...) from 表名; // 求最小select min(要求最小值的列名) from 列名; // 统计数量 只统计不为null的记录条数 select count(表任意不存在Null...truncate delete from 表名; 删除表数据有何区别? 前者是将表直接删除,然后重新创建表,表无数据。后者是一条一条删除表中所有数据。

2.6K20

MySQL基础及原理

但这种实际开发中用的不多,因为一对一的可以创建成一张表。 但如果某一条数据的字段太多,可以将常用字段不常用字段拆分为两张表,后续讲。 一对多关联: 即表A一条数据对应表B的多条数据。...最小值运算符 多个值返回最小SELECT 字段 FROM 表 WHERE LEAST(A,B,C) GREATEST 最大值运算符 多个值返回最大值 SELECT 字段 FROM 表 WHERE...其实视图就是一个代理基表的虚拟表,它可以选择展示基表的某些字段;也可以代理对基表数据的操作,任何会视图的操作都会映射到基表;视图是由SELECT语句构成的。...视图的优点: 简化查询(封装了SELECT语句,我们可以直接调用视图,不用再写SELECT语句) 控制数据的访问(可以选择展示基表的哪些字段,或不展示哪些字段) 视图的创建 CREATE...分类: 顺序结构:程序从上往下依次执行 分支结构:程序按条件进行选择执行,从两条或多条路径中选择一条执行 循环结构:程序满足一定条件下,重复执行一组语句 针对于MySQL 的流程控制语句主要有 3

3.8K20

SQL养成这8个好习惯是一笔财富

: A、横向来看 (1)不要写SELECT *的语句,而是选择你需要的字段。...五、注意临时表表变量的用法 复杂系统,临时表表变量很难避免,关于临时表表变量的用法,需要注意: A、如果语句很复杂,连接太多,可以考虑用临时表表变量分步完成。...所以我的建议是,并发系统,尽量使用CREATE TABLE + INSERT INTO,而大数据量的单个语句使用,使用SELECT INTO。...但是性能上, 往往一个不合适的子查询用法会形成一个性能瓶颈。如果子查询的条件中使用了其外层的表的字段,这种子查询就叫作相关子查询。...只要我们查询语句中没有强制指定索引, 索引的选择使用方法是SQLSERVER的优化器自动作的选择,而它选择的根据是查询语句的条件以及相关表的统计信息,这就要求我们写SQL 语句的时候尽量使得优化器可以使用索引

10610

sql server之数据库语句优化

: A、横向来看 (1) 不要写SELECT * 的语句,而是选择你需要的字段。...五、注意临时表表变量的用 复杂系统,临时表表变量很难避免,关于临时表表变量的用法,需要注意: A、如果语句很复杂,连接太多,可以考虑用临时表表变量分步完成。...所以我的建议是,并发系统,尽量使用CREATE TABLE + INSERT INTO,而大数据量的单个语句使用,使用SELECT INTO。...但是性能上,往往一个不合适的子查询用法会形成一个性能瓶颈。如果子查询的条件中使用了其外层的表的字段,这种子查询就叫作相关子查询。...只要我们查询语句中没有强制指定索引,索引的选择使用方法是SQLSERVER的优化器自动作的选择,而它选择的根据是查询语句的条件以及相关表的统计信息,这就要求我们写SQL语句的时候尽量使得优化器可以使用索引

1.5K70

SQL Server优化之SQL语句优化

: A、横向来看 (1) 不要写SELECT * 的语句,而是选择你需要的字段。...五、注意临时表表变量的用 复杂系统,临时表表变量很难避免,关于临时表表变量的用法,需要注意: A、如果语句很复杂,连接太多,可以考虑用临时表表变量分步完成。...所以我的建议是,并发系统,尽量使用CREATE TABLE + INSERT INTO,而大数据量的单个语句使用,使用SELECT INTO。...但是性能上,往往一个不合适的子查询用法会形成一个性能瓶颈。如果子查询的条件中使用了其外层的表的字段,这种子查询就叫作相关子查询。...只要我们查询语句中没有强制指定索引,索引的选择使用方法是SQLSERVER的优化器自动作的选择,而它选择的根据是查询语句的条件以及相关表的统计信息,这就要求我们写SQL语句的时候尽量使得优化器可以使用索引

3.5K34

sql语句时间处理那些事儿

所有语句都是基于mysql的语法,能用一条sql语句搞定的就不要去写程序。...自动设置记录的创建和更新时间 为每一条记录添加create_timeupdate_time是非常明智的选择,分别表示当前记录第一次添加最后一次更改的时间戳。...如果你不知道sql语句可以自动完成这个事儿,那么就不可避免要在程序手动去设置这两个字段的值。...时区转化 很多时候为了程序处理方便统一,表某个字段的时间是utc时间,但是生成报表需要转化成北京时间。...不需要查出来后用程序处理,sql语句也能通通搞定。 有一个很常用的时序统计相关的需求,按照月统计新增用户数量并按照日期从小到大排序。

1.1K40

SQL好的写法

,避免这类事件需要注意: A、横向来看,   (1)不要写SELECT *的语句,而是选择你需要的字段。   ...五、注意临时表表变量的用法 复杂系统,临时表表变量很难避免,关于临时表表变量的用法,需要注意:   A、如果语句很复杂,连接太多,可以考虑用临时表表变量分步完成。   ..., 所以我的建议是,并发系统,尽量使用CREATE TABLE + INSERT INTO,而大数据量的单个语句使用,使用SELECT INTO。  ...但是性能上,往往一个不合适的子查询用法会形成一个性能瓶颈。如果子查询的条件中使用了其外层的表的字段,这种子查询就叫作相关子查询。   ...只要我们查询语句中没有强制指定索引,索引的选择使用方法是SQLSERVER的优化器自动作的选择,而它选择的根据是查询语句的条件以及相关表的统计信息,这就要求我们写SQL语句的时候尽量使得优化器可以使用索引

91420

理解SQL原理SQL调优你必须知道的10条铁律

: 横向来看: 不要写SELECT *的语句,而是选择你需要的字段。...注意临时表表变量的用法 复杂系统,临时表表变量很难避免,关于临时表表变量的用法,需要注意: 如果语句很复杂,连接太多,可以考虑用临时表表变量分步完成。...TABLE + INSERT INTO,而大数据量的单个语句使用,使用SELECT INTO。...但是性能上,往往一个不合适的子查询用法会形成一个性能瓶颈。如果子查询的条件中使用了其外层的表的字段,这种子查询就叫作相关子查询。...只要我们查询语句中没有强制指定索引,索引的选择使用方法是SQLSERVER的优化器自动作的选择,而它选择的根据是查询语句的条件以及相关表的统计信息,这就要求我们写SQL。

1.3K50

SQL养成这8个好习惯是一笔财富

: A、横向来看 (1)不要写SELECT *的语句,而是选择你需要的字段。...5、注意临时表表变量的用法 复杂系统,临时表表变量很难避免,关于临时表表变量的用法,需要注意: A、如果语句很复杂,连接太多,可以考虑用临时表表变量分步完成。...所以我的建议是,并发系统,尽量使用CREATE TABLE + INSERT INTO,而大数据量的单个语句使用,使用SELECT INTO。...但是性能上,往往一个不合适的子查询用法会形成一个性能瓶颈。如果子查询的条件中使用了其外层的表的字段,这种子查询就叫作相关子查询。...只要我们查询语句中没有强制指定索引,索引的选择使用方法是SQLSERVER的优化器自动作的选择,而它选择的根据是查询语句的条件以及相关表的统计信息,这就要求我们写SQL语句的时候尽量使得优化器可以使用索引

73910

8个能提升工作效率的SQL好习惯

: A、横向来看 (1)不要写SELECT *的语句,而是选择你需要的字段。...注意临时表表变量的用法 复杂系统,临时表表变量很难避免,关于临时表表变量的用法,需要注意: A、如果语句很复杂,连接太多,可以考虑用临时表表变量分步完成。...所以我的建议是,并发系统,尽量使用CREATE TABLE + INSERT INTO,而大数据量的单个语句使用,使用SELECT INTO。...但是性能上, 往往一个不合适的子查询用法会形成一个性能瓶颈。如果子查询的条件中使用了其外层的表的字段,这种子查询就叫作相关子查询。...只要我们查询语句中没有强制指定索引, 索引的选择使用方法是SQLSERVER的优化器自动作的选择,而它选择的根据是查询语句的条件以及相关表的统计信息,这就要求我们写SQL 语句的时候尽量使得优化器可以使用索引

21620

八、MYSQL常用函数

一、常用函数 我们通常说的MySQL函数值得是MySQL数据库提供的内置函数,包括数学函数,字符串函数,日期时间函数,聚合函数,条件判断函数等,这些内置函数可以帮助用户更方便的处理表的数据,简化用户操作...常用的 MySQL 内置函数如下: now 函数 now() 用于返回当前的日期时间。...实际应用,大多数业务表都会带一个创建时间 create_time 字段用于记录每一条数据产生的时间,向表插入数据时,就可以 insert 语句中使用 now() 函数。...函数 date_format() 用于以指定的格式显示日期或时间,实际应用中一般会按照标准格式存储日期时间,但是查询使用数据的时候往往又会有不同的格式要求,这是就需要 date_format()...,可以SQL语句中使用 case when 来获取更加准确直接的结果。

99620

Java知识点——MySQL

查询语句【重点】DQL 7.1 基本格式 select 查询内容 from 从哪里查; -- 查询内容 字段名 列明 -- 从哪里查 表名 7.1.1 基本查询,字段表名 -- * 所有字段全部展示 -..., FIRST_NAME, LAST_NAME, SALARY * 12 from t_employees; -- 这里允许使用+ - * / 可以完成字段字段直接的算术运算 -- %SQL语句中不是取余...fieldName from tbName order by fieldName asc/desc; -- 查询结果展示,按照执行的字段作为标记完成升序降序 7.2.1 单一条件排序 select...by SALARY desc ; -- order by 指定字段要求排序 降序 7.2.2 多字段条件排序 -- 第一条件是工资降序,当第一条件出现一致情况下,使用第二条件进行二次排序 select...min() 指定字段一列最小值 count() 指定字段有多少行 -- 工资总和 select sum(SALARY) from t_employees; -- 工资平均数 select avg

81010

Mysql| Mysql函数,聚集函数的介绍与使用(Lower,Date,Mod,AVG,...)

(也就是说mysql可以使用的函数,在其他比如oracle中有可能就不支持使用,函数是没有普通SQL语句的可移植性强.)...-09-01 00:00:00'; 这样也就有一个问题,当数据库的数据不恰好是0点0分0秒时,上面的SQL语句就匹配不到结果.比如修改一下第一条记录为一下上午10点时,上面的SQL语句就不能匹配到结果了...(与普通的函数最主要的区别聚集函数值返回一条结果,这当然是使用分组语句的情况下) 当我们只需要汇总数据而不用把它们实际数据检索出来时,可以使用聚集函数.只需要返回汇总数据时,返回实际表数据是对时间处理资源的一种浪费...(通常都是对数值进行聚集返回一条数据.但是minmax函数除了可以对数值型数据进行计算还支持时间类型和文本类型的计算,具体见相关函数的详情用法.)...与MAX()一样, MIN()要求指定列名.对非数值数据使用MIN() MIN()函数与MAX()函数类似,MySQL允许将它用来返回任意列最小值,包括返回文本列最小值。

1.5K10

原 收集SQL语句统计每天、每月、每年的数

,现在要求求一年每个月的统计数据(一条sql) SELECT   MONTH (  那个日期字段  ),   SUM(  需要统计的字段, 比如销售额什么的 ) FROM   表 WHERE   YEAR...GROUP BY  MONTH (  那个日期字段  ) 用SELECT语句对数据进行统计汇总 avg ([ALL|DISTINCT]列名) 求指定数字字段的平均值 sum ([ALL|DISTINCT...]列名) 求指定数字字段的总和 max([ALL|DISTINCT]列名) 求指定数字字段中最大值 min ([ALL|DISTINCT]列名) 求指定数字字段最小值 count([ALL|DISTINCT...GROUP BY子句中不允许使用字段或计算列的别名,可直接使用表达式.     GROUP BY子句指定表达式时,select指定的字段可以不包括该表达式.     ...HAVING子句不允许使用别名     HAVING子句必须GROUP BY一起使用,且设置的条件必须与GROUP BY 子句指定的分组字段有关

3.7K20

互联网MySQL开发规范

单表数据量建议控制5000W以内 5. 在数据库存储图、文件等大数据 6. 禁止在线上做数据库压力测试 7. 禁从测试、开发环境直连数据库 **二、命名规范 1....备份库、表必须以bak为前缀,并以日期为后缀 三、库、表、字段开发设计规范 1. 禁使用分区表 2. 拆分大字段访问频率低的字段,分离冷热数据 3. 采用合适的分库分表策略。 4....多条字段重复的语句,要修改语句条件字段的顺序,为其建立一条联合索引,减少索引数量 11、能使用唯一索引就要使用唯一索引,提高查询效率 12、研发要经常使用explain,如果发现索引选择性差,必须让他们学会使用...*,查询哪几个字段select 这几个字段 (5) sql中使用到OR的改写为用 IN() (or的效率没有in的效率高) (6) in里面数字的个数建议控制1000以内 (7) limit分页注意效率...sql发出来告知DBA等相关人员; (4) 在建新表加字段之前,要求研发至少要提前3天邮件出来,给dba们评估、优化审核的时间 (5)批量导入、导出数据必须提前通知DBA协助观察 (6) 禁在线上从库执行后台管理统计类查询

18530
领券