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

函数和索引

  • 一、函数
    • 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除后的余数。
SELECTc.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.mzph.cn/web/2213.shtml

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

相关文章

Python网络数据抓取(3):Requests

引言 在这一部分,我们将探讨Python的requests库,并且利用这个库来进行网页数据抓取。那么,我们为何需要这个库,以及怎样利用它呢? requests库是广受大家欢迎的一个库,它是下载次数最多的。这个库使我们能够…

在windows系统安裝 SQL Server 版本的最低需求

針對對應您的作業系統所要安裝的 SQL Server 版本的最低需求 具体参考:Windows 作業系統的 SQL Server - SQL Server | Microsoft Learn

stable-diffusion-webui安装与使用过程中的遇到的error合集

stable-diffusion-webui1.9.2踩坑安装 1. 安装过程1.1 stable-diffusion-webui1.2 在win11或win10系统安装,需修改两个启动脚本1.2.1 修改webui-user.bat1.2.2 修改webui.bat 1.3 双击 webui-user.bat 启动脚本1.3.1 no module xformers. Processing without on fre…

电力调度自动化中智能电网技术的应用

电力调度自动化中智能电网技术的应用 在现代电网的现代化发展和电网重组工作中起着关键作用,由于此项技术开发时间短,目前还没有形成一个相对清晰的概念,但此技术在未来的电网发展工作中的地位已得到了一些国家的认可。由于智能电网具有良好的兼容性以及交互性等优势,一经推出就…

解决方案 SHUTDOWN_STATE xmlrpclib.py line: 794 ERROR: supervisor shutting down

Supervisor操作命令 重新加载 Supervisor 配置: sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl restart all这将重新读取 Supervisor 的配置文件,更新进程组,然后重启所有进程。 查看 Supervisor 日志&#xff1…

3.SpringCloud版本

1.SpringCloud与SpringBoot之间版本对应 2.服务拆分的注意事项 1.不同微服务,不要重复开发相同业务。 2.微服务的数据独立,每个微服务都有自己独立的数据库,不要访问其他微服务的数据库。 3.微服务可以将自己的的业务暴露为接口&#xff…

婚恋相亲红娘牵线系统源码支持微信小程序+微信公众号+H5+APP社交交友系统搭建,扩展你的社交影响力与人脉资源

当代年轻人晚婚晚育甚至不愿意结婚不愿意相亲等问题愈来愈严重了,但是如果抛开表现去追求本质的话,其实不难发现年轻人们还是会喜欢去找一些志同道合或者聊得来的异性朋友交流,从线上发展到线下的一个流程。 核心系统核心体系是恋爱小贴士、…

【C++】详解初始化列表,隐式类型转化,类静态成员,友元

前言 初始化列表是对构造函数内容的补充,小编会详细的讲解初始化列表的概念,特性,注意点。这是本篇内容的重头戏,小编会先提一个问题来抛砖引玉。 隐式类型转换顾名思义,首先它不需要主动转换,类似于把浮点…

redis原理篇(黑马程序员虎哥 )回忆笔记

原理,老师讲的真好。相见恨晚。 以下内容是按视频课程的章节安排,在我自己听完课之后,凭借记忆总结的。(可能存在疏漏不足,后期补全和修正,同时也在这个过程巩固我自己的对于这个组件相关原理的学习&#x…

Qt Debug模式下应用程序输出界面乱码【已解决】

Qt Debug模式下应用程序输出乱码 一、问题描述二、解决方法三、相关测试 一、问题描述 源码为utf-8编码. Qt Creator在Debug模式下运行程序,下方应用程序输出界面显示乱码. 但正常运行无乱码: 二、解决方法 尝试修改文件编码、执行编码无果… 可参考…

主打国产算力 广州市通用人工智能公共算力中心项目签约

4月9日,第十届广州国际投资年会期间,企商在线(北京)数据技术股份有限公司与广州市增城区政府就“广州市通用人工智能公共算力中心”项目进行签约。 该项目由广州市增城区人民政府发起,企商在线承建。项目拟建成中国最…

RK3568 android11 修改关机弹窗界面

需要修改关机弹窗界面&#xff0c;当前界面我已经按照客户需求去掉emergency 但是客户需要按其他区域可以实现返回&#xff0c;也就是点击黑色背景取消dialog 嗑代码发现黑色布局为&#xff1a; <node index"0" text"" resource-id"com.android.…

逆向修改app就可以游戏充值到账?

hello ,大家好, 现在市场仍然流行着非常多的传奇类游戏私服或者其他类型的游戏私服,随着私服越来越多(很多并不合法),越来越多的人加入了破解,逆向修改,或者代充的队伍并从中获利。这里我给大家分享一下这些做代充的常规的做法,以及大家作为游戏服务器如何避坑做强校验…

CSS基础:最详细 padding的 4 种用法解析

你好&#xff0c;我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃&#xff0c;大专生&#xff0c;一枚程序媛&#xff0c;感谢关注。回复 “前端基础题”&#xff0c;可免费获得前端基础 100 题汇总&#xff0c;回复 “前端工具”&#xff0c;可获取 We…

编写一款2D CAD/CAM软件(十四)绘制工具栏

前面的文章已经封装了数个最基本的图元&#xff0c;但是视图的呈现是基于测试数据形成的。为了尽快完善软件交互的框架和能力&#xff0c;本文将增加工具栏。 资源文件 1.首先&#xff0c;创建按钮图标。使用绘图软件构建出工具栏按钮的图标&#xff0c;绘图软件多种多样&…

Vue之v-on事件修饰符的含义及使用

背景&#xff1a;Vue 拆封了一个组件&#xff0c;在组件里面会使用一个方法来改变父组件传过来的值&#xff0c; 但是在子组件里面操作父组件的数据变更&#xff0c;实在比较麻烦&#xff08;因为单向数据流&#xff09;&#xff0c; So 能不能直接在组件上面绑定事件方法呢&…

Nest 快速上手 —— (一)nest介绍与启动安装

参考资料&#xff1a;https://docs.nestjs.com/ 0.介绍 Nest (NestJS)是一个用于构建高效、可扩展的Node.js服务器端应用程序的框架。它使用渐进式JavaScript&#xff0c;构建并完全支持TypeScript(但仍然允许开发人员使用纯JavaScript编写代码)&#xff0c;并结合了OOP(面向对…

HCIP【路由过滤、路由引入实验】

目录 实验要求&#xff1a; 实验拓扑图&#xff1a; 实验思路&#xff1a; 实验步骤&#xff1a; 一、配IP地址 二、在相应的设备上配置RIP协议和OSPF协议 三、路由引入 四、路由过滤 五、配置静默接口 实验要求&#xff1a; 1、按照图示配置 IP 地址&#xff0c;R1&a…

网络靶场实战-Qiling Fuzz实例分析

背景 在上一小节中&#xff0c;介绍了qiling框架的背景和基础使用&#xff0c;并以相关的CTF和qilinglab实例进行练习加深对qiling框架的使用&#xff0c;后续并简单介绍了qiling fuzz的功能。 在这一小节&#xff0c;我们将对qiling fuzz iot设备进行测试以及以实例的方式对…

C++ 面向对象-封装

C 是一种多范式编程语言&#xff0c;它支持面向对象编程&#xff08;OOP&#xff09;范式。面向对象编程是一种程序设计思想&#xff0c;其中程序由对象组成&#xff0c;每个对象都是一个实例&#xff0c;具有数据和相关操作。在C中&#xff0c;实现面向对象编程主要通过类和对…