Mysql_常规的sql优化

Mysql_常规的sql优化

注意

本博文仅供学术研究和交流参考,严禁将其用于商业用途。如因违规使用产生的任何法律问题,使用者需自行负责。

概念

  • 对于MySQL的SQL优化,可以考虑以下几个方面:
  1. 使用合适的索引:索引是提高查询性能的关键。根据实际的查询需求,合理创建索引,可以加快查询速度。需要注意的是,过多或不必要的索引可能会降低写操作的性能,因此需要权衡。

  2. 编写高效的SQL语句:编写优化的SQL语句可以提升查询性能。避免使用SELECT *查询所有字段,而是只查询所需字段。避免使用SELECT DISTINCTORDER BY RAND()等耗时的操作。合理使用JOIN查询和子查询,避免多次查询数据库。

  3. 优化表结构:合理设计表的结构,将相关的字段放在一起,避免冗余字段。选择合适的数据类型,避免过大或过小的字段长度。根据查询需求拆分表,避免过大的表影响查询性能。

  4. 避免全表扫描:使用索引和适当的查询条件,避免全表扫描。使用EXPLAIN命令分析查询语句的执行计划,查看是否有全表扫描或索引未命中的情况。

  5. 使用批量操作:对于需要批量插入或更新的数据,使用批量操作可以显著提高性能。例如,使用INSERT INTO ... VALUES (...), (...), ...语法进行批量插入。

  6. 避免频繁的连接和断开:连接和断开数据库的操作是耗时的,尽量减少频繁的连接和断开操作。可以使用连接池技术,复用数据库连接。

  7. 配置适当的缓存:对于频繁查询的数据,可以使用缓存技术,将数据缓存在内存中,减少数据库查询的次数。

  8. 定期优化数据库:定期进行数据库维护和优化操作,例如,清理无用的数据、优化表结构、重新统计索引等。


涎涎原创...大约 5 分钟MySqlMySql
Mysql_关系型数据库事务及其简单示例

Mysql_关系型数据库事务及其简单示例

注意

本博文仅供学术研究和交流参考,严禁将其用于商业用途。如因违规使用产生的任何法律问题,使用者需自行负责。

概念

MySQL事务是一组被视为一个逻辑单元的SQL操作, 这些操作要么全部成功执行,要么全部回滚到初始状态,以保证数据库的一致性和完整性。


涎涎原创...大约 4 分钟MySqlMySql
Mysql_如何有效利用索引

Mysql_如何有效利用索引

注意

本博文仅供学术研究和交流参考,严禁将其用于商业用途。如因违规使用产生的任何法律问题,使用者需自行负责。

  • 要有效地利用MySQL索引,可以考虑以下几点:
  1. 选择合适的索引类型:MySQL支持多种索引类型,如B-tree索引、哈希索引和全文索引等。根据不同的查询需求和数据特点,选择适合的索引类型。

  2. 设计合理的索引字段:选择需要索引的字段时,应考虑到频繁进行查询、排序或连接的字段。通常情况下,主键和外键字段是常见的索引字段选择。

  3. 考虑索引列的顺序:多列索引时,索引列的顺序对查询的效率有影响。将常用作为查询条件的列放在前面,以便更好地利用索引。

  4. 避免冗余索引:不要为同一列创建重复的索引,这样会浪费存储空间,并增加索引维护的开销。根据实际查询需求,合理选择创建索引。

  5. 避免过多的索引:过多的索引不仅会占用存储空间,还会增加数据插入、更新和删除时的开销。只创建必要的索引,避免过度索引。

  6. 统计信息的更新:MySQL会根据统计信息来选择合适的索引执行查询计划。定期更新表的统计信息,以便MySQL能够更准确地选择索引。

  7. 避免过长的索引:索引字段的长度应适中,避免创建过长的索引。过长的索引会增加存储空间和维护成本。

  8. 使用覆盖索引:通过创建覆盖索引,可以避免回表查询,提高查询效率。覆盖索引是指索引包含了查询所需的所有列,不需要额外的IO操作。

  9. 避免使用通配符开头的查询:通配符开头的查询(如"%abc")无法使用索引,因为索引是按照顺序存储的。尽量避免使用通配符开头的查询条件。

  10. 定期优化和监控索引:随着数据的增加和业务的变化,索引的效果可能会发生变化。定期监控索引的使用情况,并进行必要的优化。


涎涎原创...大约 3 分钟MySqlMySql
Mysql_性能分析及调优以及优化技巧

Mysql_性能分析及调优以及优化技巧

注意

本博文仅供学术研究和交流参考,严禁将其用于商业用途。如因违规使用产生的任何法律问题,使用者需自行负责。

  • MySQL 性能分析、调优和优化是数据库管理中重要的一部分。下面是一些常见的 MySQL 性能分析、调优和优化技巧的示例:
  1. 优化查询语句:使用合适的索引、避免全表扫描、优化复杂查询等。可以通过使用 EXPLAIN 命令分析查询计划,找出潜在的性能问题。

  2. 适当分区:对于大型表,可以考虑使用分区技术,将表按照某个列的值进行分区,提高查询效率。

  3. 合理设计数据库架构:根据应用的需求和数据访问模式,设计合理的数据库表结构和关系,避免冗余和不必要的关联查询。

  4. 优化索引:选择合适的索引类型、字段顺序和索引覆盖等,避免过多的索引和不必要的索引,提高查询效率。

  5. 配置合适的缓冲池:调整 MySQL 的缓冲池大小(如 InnoDB 的缓冲池大小),提高内存利用率,减少磁盘 I/O。

  6. 分析慢查询:通过开启慢查询日志,收集慢查询语句并进行分析,找出性能瓶颈和优化的方向。

  7. 控制事务的范围和并发度:合理设置事务的隔离级别和控制并发度,避免锁竞争和死锁问题。

  8. 使用查询缓存:对于经常查询但很少变化的数据,可以启用 MySQL 的查询缓存,避免重复查询。

  9. 配置合理的日志和参数:根据应用的需求和硬件环境,调整 MySQL 的日志参数和其他配置参数,如日志级别、连接数、缓存大小等。

  10. 定期优化表和索引:定期进行表的优化和碎片整理,重新构建索引,保持表的性能和索引的有效性。


涎涎原创...大约 2 分钟MySqlMySql
Mysql-Navicat更改查询语句保存路径报错Connection

65-Mysql-Navicat更改查询语句保存路径报错Connection is being used.md

注意

本博文仅供学术研究和交流参考,严禁将其用于商业用途。如因违规使用产生的任何法律问题,使用者需自行负责。

对于习惯于使用oracle的plsql工具的小伙伴来说navicat是有那么一点点不太一样, 在pl/sql里面一个查询语句保存为.sql文件简直是随心所欲,想保存在哪里就保存在哪里, 而且是一个.sql文件都可以保存在任意位置的,甚至我完全可以相信,只要问出这个问题的小伙伴 一定是长时间的pl/sql使用者,navicat中它保存.sql文件是一个固定的位置, 你修改了也是另存为一个固定位置,以后你不管有多少个.sql文件都是保存在这个固定的位置,如下图所示进行更改


涎涎原创...大约 2 分钟MySqlMySql
Mysql-navicat添加外键Can't

Mysql-navicat添加外键Can't

注意

本博文仅供学术研究和交流参考,严禁将其用于商业用途。如因违规使用产生的任何法律问题,使用者需自行负责。

报错详细信息

Can't create table 'mylibary.#sql-1510_7e' (errno 150)

涎涎原创...小于 1 分钟MySqlMySql
Mysql-navacat添加主键时报错Error

Mysql-navacat添加主键时报错Error

注意

本博文仅供学术研究和交流参考,严禁将其用于商业用途。如因违规使用产生的任何法律问题,使用者需自行负责。

报错详细信息

最近将oracle数据库迁移至了mysql中,但两数据库稍有不同,比如序列,一些数据类型等。

Error on rename of 'mylibary#sql-1510_7e' to 'mylibary mylibary_user' (errno 150)

涎涎原创...大约 1 分钟MySqlMySql
MySQL-数据库介绍与安装

4-MySQL-数据库介绍与安装.md

注意

本博文仅供学术研究和交流参考,严禁将其用于商业用途。如因违规使用产生的任何法律问题,使用者需自行负责。

  • 数据库基础知识
    • 数据库介绍

      • 什么是数据库
        • 数据库是按照一定的数据结构来组织、存储和管理数据的仓库
      • 数据库的发展史
        • 最早的数据库
          • 通过大量的分类、比较和表格绘制的机器运行数百万穿孔卡片来进行数据的处理,其运行结果在纸上打印出来或者制成新的穿孔卡片。
        • 数据库发展
          • 当时计算机开始广泛地应用于数据管理,对数据的共享提出了越来越高的要求,传统的文件系统已经不能满足人们的需要。能够统一管理和共享数据的数据库管理系统(DBMS)应动而生
      • 数据库管理系统DBMS
        • 是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS
        • 它对数据库统一的管理和控制,以保证数据库的安全性和完整性。
        • 数据库管理系统是数据库系统的核心,是管理数据库的软件。
        • 我们一般说的数据库,就是指DBMS:数据库管理系统
      • 常见的数据库
        • Oracle
          • 运行稳定,可移植性高,功能齐全,性能超群!适用于大型企业领域。
        • DB2
          • 速度快、可靠性好,适于海量数据,恢复性极强。适用于大中型企业领域。
        • MySQL
          • 开源,体积小,速度快。适用于于中小型企业领域。
        • SQL Server
          • 全面,效率高,界面友好,操作容易,但是不跨平台。适用于中小型企业领域。
    • 专业术语

        • 具有有固定的列数和任意的行数
        • 一个数据项Field字段
        • 一条记录 row
      • 数据库

        • 数据库是一些关联表的集合
      • 主键

        • 主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
      • 外键

        • 外键用于关联两个表
      • 索引

        • 使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
    • MySQL数据库

      • Mysql介绍
        • MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度 并提高了灵活性。
        • Mysql是开源的,所以你不需要支付额外的费用。
        • Mysql支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
        • Mysql使用标准的SQL数据语言形式。
        • Mysql可以允许于多个系统上,并且支持多种语言。这些编程语言包括C、C++、Pytho、Java、PHP、Eiffel、Ruby和Tcl等。
      • Mysql安装
    • 常用数据库命令

      • Mysql数据库分为两种

        • 系统数据库(数据库服务器自带的.自带的4个)
          • information_schema
            • 存储数据库对象信息
            • 如用户表信息.列信息。根除.字符.分区
            • 里面的内容我们不能动。
          • performance_schema
            • 存储数据库服务器性能参数信息
          • mysql
            • 存储数据库用户权限信息
          • sys
            • 通过这个库可以快速的了解系统的元数据信息
        • 用户数据库
          • 用户自己创建数据库,一个项目用一个数据库
      • 创建数据库

        • create database 数据库名称
      • 删除数据库

        • drop database 数据库名称
      • 查看数据库

        • show databases;
      • 使用数据库

        • use 数据库名;
    • 连接Navicat

      • 更改加密方式
        • alter user 'root'@'localhost' identified by 'password' password expire never;
        • alter user 'root'@'localhost' identified with mysql_native_password by 'password';
        • flush privileges;
      • 软件获取
    • 字符集

      • 字符集的由来
        • 计算机只能识别二进制代码无论是计算机程序还是数据,最终都会转换成二进制,计算机才能认识。
        • 为了计算机不只能做科学计算,也能处理文字信息。人们想出了给每一个文字符号编码以便于计算识别处理的办法 ,这就是计算机字符集的由来。
        • 我 00001
        • 人 00010
      • ASSCII
        • 一套文字符及其编码比较规则的集合。
          • 20世纪60年代初。美国标准化组织ANSI发布了第一个字符集。ASCII后来又进一步成了国际标准ISO-646
        • 各大字符集
          • 自ASCII后。为了处理不同的文字。各大计算机公司。各国,标准化政府,组织先后发明了几百种字符集。
            • ISO-8859
            • GB2312-80
            • GBK
            • BIG5
          • 这些五花八门的字符集从收录的字符集到编码规则各不相同,给计算机软件开发和移植带来了很大困难。
          • 一个软件要在使用不同文字的国家和地区发布,必须得要做本地化开发。
          • 基于这个原因,要统一字符编码。
      • unicode
        • 为了统一字符编码,国际标准化组织ISO的一些成员国于1984年发起制定了新的国际字符集标准。容纳全世界各种语言,文字,和 符号。最后这个标准ISO-10646
        • ISO-10646发布后,遭到了美国计算机公司的反对。
        • 1988年,Xerox公司提议制定了新的以16位编码人统一字符集,并联合不Apple,IBM,SUM,Microsoft等公司成立了Unicode技术委员会,专门负责收集,整理,和编码,于1991年推出了Unicode1.0
        • 都是为了字符编码统一问题,ISO和Unicode协会推出了连个不同人标准,这显然是不利的,后来双方开始谈判。1991年10月达成协议。ISO将Unicode收编,起了个名BMP。
        • Unicode是用0至65535之间的数字来表示所有字符
        • 其中0至127这128个数字的字符仍然跟ASCII完全一样
      • UTF-16
        • 怎么把0至65535这些数字转化成01串保存到计算机中
        • 于是出现了UTF(unicode transformation format).
        • UTF-16比较好理解,就是任何字符对应的数字都用两个字节来保存。
        • 但是很显然如果都是英文字母这做有点浪费,明明用一个字节都表示一个字符为啥整两个啊
      • UTF-8
        • 于是有个UTF-8
        • 这里的8非常容易误导人,8不是指一个字节
        • 当用UTF-8时表示一个字符是可变的,有可能是用一个字节表示一个字符,也可能是两个,三个。。反正是根据字符对应的数字大小来确定。
      • 汉字的一些常见字符集
        • GB2312
        • GB13000
        • GBK
        • GB18030
    • MySql的存储引擎

      • 什么是存储引擎
        • MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的或者功能,从而改善你的应用的整体功能。
        • 不同的存储引擎性能是不一样的
      • 存储引擎分类
        • MYISAM
          • 它不支持事务,也不支持外键,尤其是访问速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用基本都可以使用这个引擎来创建表。
          • 每个MylSAM在磁盘上存储成3个文件,其中文件名和表名相同,但是扩展名分别为:
            • .frm(存储表定义)
            • MYD(MYData,存储数据)
            • MYI(MYIndex,存储索引)
        • INNODB
          • InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全,但是对比MylSAM的存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。
        • MEMORY
          • memory使用存在内存中的内容来创建表。每个memory表实际对应一个磁盘文件,格式是.frm
          • memory类型的表访问非常快,因为它到数据是放在内存中的,并且默认使用HASH索引,但是一旦服务器关闭,表中的数据就会丢失,但表还会继续存在。

涎涎原创...大约 8 分钟MySqlMySql
2