一、SQL语句
简单查询一个字段
select 字段名 from 表名
select * from dept
这种方式的缺点:
效率低
可读性差
在实际开发中不建议
给查询列起别名
select 字段名as别名 from 表名
select 字段名 ‘别名’ from 表名
参与数学运算
select sol*12 as ’yearslo‘ from database //起别名的应用
条件查询
SELECT
user_id ' USERID'
FROM
users
WHERE
user_id BETWEEN 1 AND 15
ORDER BY
user_id
DESC
数据处理函数
upper转换大写 | Lower转换小写 |
---|---|
length取长度 | substr取子串( substr(被截取的字符串,起始下标, 截取的长度)) |
trim去空格 | str to date将字符串转换成日期 |
date format格式化日期 | format设置干分位 |
round四舍五入 | rand() 生成随机数 |
ifnull 可以将 null 转换成一个具体值 | case...when...then...when....then....else....end |
SELECT
user_name,
(
CASE user_name
WHEN 'gaoxu'
THEN user_diarynum +10
WHEN 'myself'
THEN user_diarynum +50
ELSE user_diarynum
END
) AS NewNum
FROM
users
二、索引
1.B+Tree
2.几个简单概念
2.1回表
首先我们看一个SQL
select * from emp where name = ‘lian’
根据回表,首先会根据name索引,搜索第一颗B+树,也就是上面的这个图,根据lian搜索到 4
再根据 4 搜索第二棵B+树,也就是第一个图,搜索到*包含的data
那么这个过程叫做回表
2.2索引覆盖
首先还是看sql
select * from emp where name = ?
select id from emp where name = ?
首先第一句SQL会触发回表
第二句sql在搜索第一颗B+树时就可以搜索到id,那么几个过程就是索引覆盖
2.3最左匹配
最左匹配:
组合索引:name, age
(name, age)
where name=? and age=?
where name=?
where age=?
where age=? and name=?
第1、2、4条sql会做索引,最左匹配在组合索引时会先匹配最左的字段也就是name
那么问题是为什么第四条sql也可以,这就是mysql内部的优化器
最左匹配类似于三级联动,先选省才能选市,
2.4索引下推
索引下推
select from table where name=? and age=?
数据存储磁盘
mysql又自己的服务
mysql服务要跟磁盘发生交互
没有索引下推
1、先从存储引擎中拉取数据(根据name筛选的数据)
再 mysql server根据age进行数据的筛选有索引下推
会再拉取数据的时候直接根据name,age来获取数据,不需要 server做任何的数据筛选
有索引下推
会再拉取数据的时候直接根据name,age来获取数据,不需要 server做任何的数据筛选
[...]Docker容器 -2021Dubbo框架 -2020Git版本控制-20180Golang语言入门-2021Java设计模式-2019JVM探究-2019Mybatis框架-2019MySQL数据库-2019Netty网络编程框架-2021Redis数据库-2020SMS框架整合-2019Spring框架-2018Springboot框架-2019Springmvc框架-2019SVN版本控制-[...]