java开发中的重中之重

Wesley13
• 阅读 453
  • 介绍:

  mysql是目前世界上最流行的关系型数据库,在国内大的互联网公司都在使用mysql数据库,mysql经常被我们这样概述,“mysql是轻量级关系型数据库”,其实轻量级并不是说mysql是中小型数据库,在项目开发中,存储数据的量往往是一个架构问题,如果配合架构,mysql也是可以存储海量数据的。并且海量数据并没有一个明确的标准。说mysql是轻量级关系型数据库,原因是mysql不擅长对海量数据的分析。在一般的互联网公司海量数据并不常见,因此mysql是中小型公司的最佳选择。

  • mysql的查询执行过程:在开发中经常用到mysql进行数据查询,那么mysql的查询执行过程是什么样的呢?
  1. 首先连接mysql发布查询
  2. 先去查询缓存中是否有结果集,如果有则直接返回结果集
  3. 如果没有结果集,那么mysql解析查询将通过优化器生产执行计划,然后运行执行计划通过API从存储引擎获取数据,并返回给客户端
  • 存储引擎:下面主要介绍下常用引擎的特性(一共有20多个引擎)
  1. InnoDB引擎:在mysql5.5版本以后的版本中,InnoDB是mysql的默认引擎,在近几年的版本更新中,InnoDB一直在持续改进,处理能力不断提高,下面看一下InnoDB的优势
    1. 灾难恢复性好
    2. 支持全部级别的事物(一共四种事物),其中默认事物隔离级别是可重复读
    3. 使用行级锁
    4. 支持外键
    5. 支持热备份
  2. MyISAM引擎:
    1. 无事物支持
    2. 使用的是表级锁,并发性差
    3. 主机宕机后,MyISAM表易损坏,灾难恢复性不佳
    4. 只缓存索引

  以上两种索引的注意区别:InnoDB读取数据的速度远远小于MyISAM,但是MyISAM的写入数据远小于InnoDB

  • mysql函数:
  1. 算数操作符:+ 、-、*、/、DIV(整除)
  2. 数学函数:
    • ABS(X):X的绝对值
    • CEIL(X):返回不小于X的最小整数值
    • FLOOR:返回不大于X的最大整数值

    3.字符类型处理函数

    • CHAR_LENGTH(str):返回值为字符串str的长度,长度单位为字符
    • LENGTH(str):返回值为字符串str的长度,单位为字节
    • CONCAT(str1,str2):返回结果是str1和str2拼接产生的字符串
    • LEFT(str,len):返回从左边开始len个字符,相反RIGHT(str,len)
    • SUBSTRING(str,pos)、SUBSTRING(str,pos,len):pos是起始字符串
    • LOWER(str):返回字符串str转化为小写字母的字符,相反UPPER(str)

   4.日期格式

    • NOW():返回当前日期和时间的值,格式是‘YYYY-MM-DD HH:MM:SS’
    • CURTIME():将当前时间以‘HH:MM:SS’的格式返回
    • CURDATE():将当前时间以‘YYYY-MM-DD’格式返回
    • DATEDIFF(expr1,expr2)返回两个如期之间相隔的天数
    • STR_TO_DATE(str,format):String转日期类型
  • mysql语法(简单的就不讲了,主要讲一下常用的表连接)
  1. 等值连接(inner  join):也叫内连接,把所有表里出现的数据全部连接起来
  2. 左连接(left join):左连接就是左表中的所有数据按字段匹配右表中的数据,新表包括左表中的所有字段,如果匹配不到右表中的数据用空表示
  3. 右连接(right join):右连接与左连接类似,就是右表中的数据按字段匹配左表中的字段,新表包括右表中的所有字段,如果匹配不到左表中的数据用空表示
  • 索引(做开发这么长时间,我认为索引在mysql中是比较重要的存在,特别是面试的时候容易被问到)

mysql主要支持的几种索引:B树索引(B-tree)、散列索引(hash)、空间索引(R-tree)、全文索引(full-text)。这里主要讲一下B树索引(B-tree)。下面讲一下索引的场景及注意事项:

  1. 何种查询可以应用索引

    (1)、mysql目前仅支持前导列

        筛选记录的条件应能组成复合索引最左边的部分,即按照最左前缀的原则进行筛选,例如:idx_a_b_c,那么只有where时条件必须按照a=? and b=? and c=? 复合索引才有效

    (2)、索引列上的范围查找(where ... between ... and ...或者>、<等范围操作时,那么可能用到索引的范围查找。在一般的的操作中,应避免大范围索引范围查找,如果索引范围查找的成本太高,那么数据库可能会选择全表扫描)

    (3)、join列:在联合查询a表和b表时,若a为驱动表,那么数据库可能会全表扫描a表,然后用a表的每个id探测b表的索引查找匹配的记录

    (4)、where子句:

        举例子就一目了然:复合索引idx_a_b_c_d

          where a=? and b=? and c>10000;   这种情况可以用到a_b_c复合索引

          where a=? and b=? and c>10000 and d<10000; 这种情况d的索引是用不到的

          where a>10000 and b=? and c=? and d=?; 这种情况只有a的范围查找,其他bcd的索引是用不到的

    (5)、mysql优化器

        mysql优化器会做一些特殊优化,比如对于索引查找MAX(索引列),那么可以进行直接定位。

  • 持续更新:

1、数据库的大小写敏感需要设置,包括字段、字段值、数据表、数据库等

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这