Mysql介绍与如何对其优化

本文详细介绍了MySQL数据库管理系统的特点、数据类型及优化方法。涵盖了数值、时间、字符串等多种数据类型的存储方式和范围,以及如何通过优化SQL语句、全文索引等方式提高数据库性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Mysql介绍

MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

  • MySQL 是开源的,所以你不需要支付额外的费用。
  • MySQL 使用标准的SQL数据语言形式。
  • MySQL 可以运行于多个系统上,并且支持多种语言。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。
  • MySQL 对PHP有很好的支持,PHP是目前最流行的Web开发语言。
  • MySQL 支持大型数据库,支持5000万条记录的数据仓库,32位系统表文件最大可支持4GB,64位系统支持最大的表文件为8TB。
  • MySQL 是可以定制的,采用了GPL协议,你可以修改源码来开发自己的 MySQL 系统。

2.Mysql数据结构

1.Mysql数据类型

MySQL支持所有标准SQL数值数据类型。

这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)

关键字INTINTEGER的同义词,关键字DECDECIMAL的同义词。

BIT数据类型保存位字段值,并且支持MyISAM、MEMORY、InnoDBBDB表。

作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。下面的表显示了需要的每个整数类型的存储和范围。

类型大小范围(有符号,大概值)范围(无符号,大概值)用途
TINYINT1字节(-128,127)(0,255)小整数
SMALLINT2字节(-32 768,32 767)(0,65 535)小整数
MEDIUMINT3字节(-8 388 608,8 388 607)(0,16 777 215)大整数
INT(INTEGER)4字节(-2 147 483 648,2 147 483 647)(0,4 294 967 295)大整数值
BIGINT8字节(-9 233 372 036 854 775 808,9 223 372 036 854 775 807)(0,18 446 744 073 709 551 615)极大整数值
FLOAT4字节(-3.4E+38,-1.176 E-38),0,(1.176E-38,3.40E+38)0,(1.176 E-38,3.40E+38)单精度,浮点数值
DOUBLE8字节(-1.80E+308,-2.2E-308),0,(2.2E-308,1.80 E+308)0,(2.20E-308,1.80E+308)双精度,浮点数值
DECIMAL对DECIMAL(M,D),如果M>D,为M+2否则为D+2依赖于M和D的值依赖于M和D的值小数值
2.Mysql时间类型

表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR

每个时间类型有一个有效值范围和一个”零”值,当指定不合法的MySQL不能表示的值时使用”零”值。

类型大小(字节)范围(有符号)格式用途
DATA31000-01-01/9999-12-31YYYY-MM-DD日期值
TIME3‘-838:59:59’/’838:59:59’HH:MM:SS时间值或持续时间
YEAR11901/2155YYYY年份值
DATETIME81000-01-01 00:00:00/9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS混合日期和时间值
TIMESTAMP41970-01-01 00:00:00/2038结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07YYYYMMDD HHMMSS混合日期和时间值,时间戳
3.字符串类型

字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET

类型大小(字节)用途
CHAR0-255定长字符串
VARCHAR0-65535可变字符串
TINYBLOB0-255不超过255个字符的二进制字符串
TINYTEXT0-255短文本字符串
BLOB0-65535h二进制形式的长文本数据
MEDIUMBLOB0-16 777 215二进制形式的中等长度文本数据
LONGBLOB0-4 294 967 295二进制形式的极大文本数据
TEXT0-65535长文本数据
MEDIUMTEXT0-16 777 215header 2
LONGTEXT0-4 294 967 295极大文本数据

CHARVARCHAR 类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。

BINARYVARBINARY 类似于CHARVARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。

MySQL优化

1.优化sql语句:insert插入的时候一般都是一次插入一条,那么同时插入有一万条数据如何实现?
一般想到的是直接循环,但是效率很低。因为mysql插入数据时先连接,选库入,语
法分析,表对应,最后才插入数据,断开连接。
办法:先for循环拼接insert sql语句,再进行上面的步骤,这样可以减少后面的四个步骤

2.用xunsearch做一个全文索引,可以联想数据库中存在的值,但是消耗mysql效率

3.分表、分库、分机器

分表 –>垂直分表和水平分表

分库 –> 主从, 一主多从或者多主多从(8.0版本不论是io都很强,相互监听,不存在主从)

硬件 –> 换固态硬盘

忘记密码?

1、首先停止mysql服务进程:
service mysqld stop
2.#然后编辑mysql的配置文件my.cnf(如果是windows的话找到my.ini)
vim /etc/my.cnf
3.#找到 [mysqld]这个模块:
#在最后面添加一段代码
skip-grant-tables   ##忽略mysql权限问题,直接登录
#然后保存 :wq!退出
#启动mysql服务:
service mysqld start
#直接进入mysql数据库:
mysql
#选择mysql数据库
use mysql;
#对user表的root用户进行密码修改
update mysql.user set authentication_string=password('123456') where user='root' and Host = 'localhost';

#特别提醒注意的一点是,新版的mysql数据库下的user表中已经没有Password字段了
#而是将加密后的用户密码存储于authentication_string字段


#执行刷新
 flush privileges;
#exit退出mysql
exit;
#启动服务
service mysqld start

3.根据已有数据库反向创建model:

1.导出数据库的数据到sql文件中
终端下source xxx.sql得到数据库所有数据

2.新建django项目,在根目录下python manage.py inspectdb > appname\models.py即可创建model。
不过需要注意的是,这样建表是没有manytomany结构的,需要自己添加

这里写图片描述

反向查询建表语句:
show create table tablename;
在项目根目录下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值