MySQL数据库

GA666666 2021-11-21 PM 51℃ 1条

一、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做任何的数据筛选
标签: none

非特殊说明,本博所有文章均为博主原创。

评论啦~



唉呀 ~ 仅有一条评论


  1. 笔记 - GA666666 Blog ~ 个人博客
    笔记 - GA666666 Blog ~ 个人博客

    [...]Docker容器 -2021Dubbo框架 -2020Git版本控制-20180Golang语言入门-2021Java设计模式-2019JVM探究-2019Mybatis框架-2019MySQL数据库-2019Netty网络编程框架-2021Redis数据库-2020SMS框架整合-2019Spring框架-2018Springboot框架-2019Springmvc框架-2019SVN版本控制-[...]

    回复 2024-02-21 11:10