MySQL学习笔记5——函数和索引

news2024/11/18 15:39:21

函数和索引

  • 一、函数
    • 1、数学函数
    • 2、字符串函数
    • 3、条件判断函数
  • 二、索引
    • 1、索引是什么
    • 2、单字段索引
    • 3、组合索引
    • 4、总结

一、函数

MySQL提供了很多功能强大,而且使用起来非常方便的函数,包括数学函数、字符串处理函数和条件判断函数等。

1、数学函数

数学函数主要用来处理数值数据,常用的主要有3类,分别是取整函数ROUND()、CEIL()、 FLOOR(),绝对值函数ABS()和求余函数MOD()。

  • 向上取整CEIL(X) 和 CEILING(X):返回大于等于X的最小INT型整数。
  • 向下取整FLOOR(X):返回小于等于X的最大INT型整数。
  • 舍入函数ROUND(X,D):X表示要处理的数,D表示保留的小数位数,处理的方式是四舍五入。ROUND(X)表示保留0位小数。
  • 绝对值函数ABS(X):获取X的绝对值。
  • MOD(X,Y):获取X被Y除后的余数。
SELECT
	c.membername AS '会员',
	b.transactionno AS '单号',
	b.transdate AS '交易时间',
	d.goodsname AS '商品名称',
	a.salesvalue AS '交易金额',
	FLOOR(a.salesvalue) AS '积分'	-- FLOOR向下取整
FROM
demo.transactiondetails a
JOIN
demo.transactionhead b ON (a.transactionid = b.transactionid) 
JOIN
demo.membermaster c ON (b.memberid = c.memberid)
JOIN
demo.goodmaster d ON (a.itemnumber = d.itemnumber);

CEIL()函数和FLOOR()用法类似,接下来演示一下ROUND()函数的用法:

SELECT ROUND(salesvalue,2)		-- 保留2位小数
FROM demo.transactiondetails
WHERE transactionid=1 AND itemnumber=1;

2、字符串函数

常用的字符串函数:

  • CONCAT(1,2…):表示把字符串s1、s2…拼接起来,组成一个字符串。
  • CAST(表达式AS CHAR):表示将表达式的值转换成字符串。
  • CHAR_ LENGTH(字符串):表示获取字符串的长度。
  • SPACE(n):表示获取一个由n个空格组成的字符串。
SELECT
CONCAT(goodsname,'(',specification,')') AS 商品信息
FROM
demo.goodmaster
WHERE itemnumber = 1;

打印结果:
在这里插入图片描述

SELECT
-- 把数量转换成字符串
-- 计算字符串的长度
CONCAT(CAST(quantity AS CHAR)),
-- 用空格补齐7位,在字符串后面补齐
SPACE(7-CHAR_LENGTH(CONCAT(CAST(quantity AS CHAR)))) AS 数量
FROM
demo.transactiondetails
WHERE transactionid = 1 AND itemnumber = 1;

除此以外,MySQL还支持SUBSTR ()、MID ()、 TRIM ()、LTRIM ()、RTRIM ()等字符串函数。
在这里插入图片描述

3、条件判断函数

条件判断函数的主要作用,就是根据特定的条件返回不同的值,常用的有两种:

  • IFNULL (V1, V2):表示如果V1的值不为空值,则返回V1,否则返回V2。
  • IF (表达式, V1, V2):如果表达式为真(TRUE) ,则返回V1,否则返回V2。
SELECT
goodsname,
specification,
-- 我们希望规格是空的商品,在拼接商品信息字符串的时候,规格不要是空。
CONCAT(goodsname,'(',IFNULL(specification,''),')') AS 拼接
FROM
demo.goodmaster;

在这里插入图片描述
规格为空时返回拼接信息“橡皮()”后面打印“()”和奇怪,所以我们通过条件判断函数将“()”去除:

SELECT
goodsname,
specification,
-- 这里做判断,如果是空值,返回商品名称,否则就返回拼接规格
IF(
ISNULL(specification),
goodsname,
CONCAT(goodsname,'(',specification,')')
) AS 拼接
FROM
demo.goodmaster;

在这里插入图片描述

二、索引

在超市信息系统刚刚开始运营的时候,因为数据量很少,每一次的查询都能很快拿到结果。但是系统运转时间长了以后,数据量不断地累积,变得越来越庞大,很多查询的速度就变得特别慢。

这个时候,我们就采用了MySQL提供的高效访问数据的方法——索引,有效地解决了这个问题,甚至之前的一个需要8秒钟才能完成的查询,现在只用0.3秒就搞定了,速度提升了20多倍。

1、索引是什么

MySQL中的索引,就相当于图书馆的检索目录,它是帮助MySQL系统快速检索数据的一种存储结构。

我们可以在索引中按照查询条件,检索索引字段的值,然后快速定位数据记录的位置,这样就不需要遍历整个数据表了。而且,数据表中的字段越多,表中数据记录越多,速度提升越是明显。

2、单字段索引

MySQL支持单字段索引和组合索引,而单字段索引比较常见。

如何创建单字段索引:

  • 可以通过CREATE语句直接给已经存在的表创建索引;
  • 可以在创建表的同时创建索引;
  • 可以通过修改表来创建索引。
-- 直接给数据表创建索引的语法如下:
CREATE INDEX 索引名 ON TABLE 表名 (字段);

-- 创建表的同时创建索引的语法如下所示:
CREATE TABLE 表名
(
字段 数据类型,
…
{INDEX|KEY}索引名(字段)
)

-- 修改表时创建索弓|的语法如下所示:
ALTER TABLE 表名 ADD {INDEX| KEY} 索引名 (字段);

这里有个小问题要注意一下,给表设定主键约束或者唯一性约束的时候,MySQL 会自动创建主键索引或唯一性索引。 这也是为什么建议在创建表的时候,一定要定义主键的原因之一。

在选择索引字段的时候,建议要选择那些经常被用做筛选条件的字段。这样才能发挥索引的作用,提升检索的效率。

3、组合索引

如果多个索引,且这些索引的字段同时作为筛选字段出现在查询中的时候,MySQL会选择使用最优的索引来执行查询操作。

能不能让这几个筛选字段同时发挥作用呢?这就用到组合索引了。组合索引,就是包含多个字段的索引。MySQL最多支持由16个字段组成的组合索引。

如何创建组合索引:

-- 直接给数据表创建索引
CREATE INDEX 索引名 ON TABLE 表名(字段1,字段2,…);

-- 创建表的同时创建索引
CREATE TABLE 表名
(
字段 数据类型,
…
{INDEX | KEY } 索引名(字段1,字段2,)
)

-- 修改表时创建索引:
ALTER TABLE 表名 ADD { INDEX| KEY } 索引名 (字段1,字段2...);

组合索引的多个字段是有序的,遵循左对齐的原则。

4、总结

-- 删除索引
DROP INDEX 索引名 ON 表名;
--删除主键索引
ALTER TABLE 表名 DROP PRIMARY KEY;

索引的成本
索引能够提升查询的效率,但是创建索引也是有成本的,主要有2个方面:

  • 存储空间的开销,是指索引|需要单独占用存储空间。
  • 数据操作上的开销,是指一旦数据表有变动,无论是插入一条新数据,还是删除一条旧的数据,甚至是修改数据,如果涉及索引字段,都需要对索引本身进行修改,以确保索弓|能够指向正确的记录。

因此,索引也不是越多越好,创建索引有存储开销和操作开销,需要综合考虑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1614212.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flink面试(1)

1.Flink 的并行度的怎么设置的? Flink设置并行度的几种方式 1.代码中设置setParallelism() 全局设置: 1 env.setParallelism(3);  算子设置(部分设置): 1 sum(1).setParallelism(3) 2.客户端CLI设置&#xff0…

shell简单联系项目

文章目录 推荐一个vscode上的好用的神奇如何使用的方式连接主机的方式配置新主机配置信息启动连接的方式 联系shell 命令的方式读取文件信息设置本地环境变量的方式获取随机数的方式简单案例信息 推荐一个vscode上的好用的神奇 如何使用的方式 连接主机的方式 配置新主机 配置…

运维小技能:nacos部署(外接mysql)

文章目录 I 安装nacos(m1版本)1.1 镜像启动1.2 查看docker容器日志1.3 开启鉴权II 外接mysql的docker部署方式2.1 复制mysql-schema.sql2.2 导入mysql-schema.sqlIII 配置远程用户3.1 创建数据库远程用户3.2 查看远程用户是否有密码I 安装nacos(m1版本) docker search nacos:查…

集成触发器(数电笔记)

同步触发器: 主从触发器: 边沿触发器:

【团体程序设计天梯赛】L2-052 吉利矩阵

思路: 直接回溯枚举每一个位置填的数,二维肯定是不方便的,我们转成一维,下标x从0到n*n-1。二维数组下标从0到n-1,在一维中下标为x的点在二维中对应行是x/n,列是x%n。 每个数最小能填的是0,最大…

一套在线画图工具(突突图 Procviz)

突突图(Procviz)是一款面向跨平台作图平台。支持流程图、思维导图、框架图、组织架构图、ER图、网络拓扑图等。实现了多团体同时协作,实时同步,解决跨地域合作作图的问题。平台提供了丰富的模板和素材库,轻松完成作图,效率翻倍。 …

imx6ull设备树驱动--pinctl、ioctl

添加pinctl节点 进入arch/arm/boot/dts目录下dts文件 在iomuxc下添加pinctlled节点 将 GPIO1_IO03 这个 PIN 复用为 GPIO1_IO03,电气属性(配置GPIO一些列寄存器)值为 0X10B0 添加led设备节点 与上一节一样,在 / 下面添加设备节…

《AIGC辅助数据分析与挖掘》AIGC助力数据可视化:Excel图形化思维与实施技巧

01 前言 在当今的数据分析中,数据可视化扮演着至关重要的角色。作为一款常用工具,Excel提供了丰富的图形展示功能。利用AIGC,我们可以快速选择合适的图形类型,并进行专业的配置,从而使得数据展示更加吸引人且具有更好…

钟薛高创始人称卖红薯也把债还上:网友,您可千万别……

网红雪糕品牌钟薛高,是真的网红属性强到让所有消费品牌羡慕。 纵使跌落神坛、纵使站在「破产」边缘,依然话题感满满,隔段时间,总能上一个热搜。 比如欠薪上热搜、产品降价上热搜、甚至官网微博微信停更,也得上个热搜&…

VSCode插件开发学习

一、环境准备 0、参考文档:VS Code插件创作中文开发文档 1、大于18版本的nodejs 2、安装Yeoman和VS Code Extension Generator: npm install -g yo generator-code 3、生成脚手架 yo code 选择内容: ? What type of extension do yo…

【1524】java投票管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java 投票管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0&…

ESG热潮背后

近年来,ESG投资在全球范围内迅速发展,已经成为行业新风口。越来越多的投资者和企业开始关注ESG因素,并将其纳入投资决策和公司运营中。 ESG指环境(Environmental)、社会(Social)、公司治理&…

揭秘!综合布线可视化管理软件如何助力集成商实现价值飞跃?

一、弱电集成商发展现状 近期小编通过与多家做弱电集成的朋友交流探讨了解到目前弱电集成商发展如同2024年国内大部分企业一样举步维艰,当然也有个别企业做的项目优质并且利润可观,但是整体不多,总结原因主要有以下几点: 工程项目…

Robbins-Monro(RM)算法【随机近似】

强化学习笔记 主要基于b站西湖大学赵世钰老师的【强化学习的数学原理】课程,个人觉得赵老师的课件深入浅出,很适合入门. 第一章 强化学习基本概念 第二章 贝尔曼方程 第三章 贝尔曼最优方程 第四章 值迭代和策略迭代 第五章 强化学习实践—GridWorld 第…

C语言枚举类型详解

下午好诶,今天小眼神给大家带来一篇C语言枚举类型详解的文章~ 目录 一、枚举类型的声明 二、枚举类型的优点 三、枚举类型的使用 一、枚举类型的声明 枚举顾名思义就是 一 一 列 举 。 比如: 一周从周一到周日共有七天,可以一一列举。 性…

ARM汇编伪指令AREA

ARM伪指令AREA用于定义一个代码段或数据段。其基本的语法格式如下: AREA 段名 属性1,属性2, ... 其中: 段名:是你为代码段或数据段指定的名称。如果段名以数字开头,则该段名需要用“│”括起来,如│1_test│。段名可…

文档在线预览,可以私有化局域网在服务器部署组件来实现在线预览

去官网查看 几行代码即可运行 https://kkfileview.keking.cn/zh-cn/index.html

引用静态方法

import java.util.Arrays; import java.util.Comparator;public class demo1 {//引用public static void main(String[] args) {Integer []arr{1,2,4,3,8,6};//匿名内部类Arrays.sort(arr, new Comparator<Integer>() {Overridepublic int compare(Integer o1, Integer o…

深度神经网络(DNN)

通过5个条件判定一件事情是否会发生&#xff0c;5个条件对这件事情是否发生的影响力不同&#xff0c;计算每个条件对这件事情发生的影响力多大&#xff0c;写一个深度神经网络&#xff08;DNN&#xff09;模型程序,最后打印5个条件分别的影响力。 示例 在深度神经网络&#xf…

葡萄书--深度学习基础

卷积神经网络 卷积神经网络具有的特性&#xff1a; 平移不变性&#xff08;translation invariance&#xff09;&#xff1a;不管检测对象出现在图像中的哪个位置&#xff0c;神经网络的前面几层应该对相同的图像区域具有相似的反应&#xff0c;即为“平移不变性”。图像的平移…