Mysql 索引、字符集、数据类型学习汇总


索引

mysql索引的建立关于Mysql的高效运转是很重要的,索引能够大大的行进mysql的检索速度。
拿汉语字典的目录页(索引)打比方,咱们能够索引符号按拼音、笔画、偏旁部mysql索引首等排序的目录(索引)快速查找到需求的字。
索引分单列索引和组合索引。

单列索引,即一个索引只包括单个列,一个表能够有多个单列索引。
组合索引,即一个索引包括多mysql安装个列。

利益

  • 索引削减了服务器需求扫描的数据量,从而加速了数据的检索速度,这也是创立索引的最主要原因。
  • 索引能够将随机IO变成次第IO
  • 经过创立仅有性索引,能够保证数据库表中每一行数据的仅有性。
  • 运用分组和排序子句进行数据检索时,相同能够削减查mysql增修改查句子询中分组和排序的时刻

缺点二进制转化为十进制

  • 创立索引和保护索引都需求消耗时刻,这种时数据库期末考试题及答案间跟着数据量的添加而添加。
  • 索引需求占用物理空间,除了表数据占用空间外,每个索引还要占用必定服务器是什么的物理空间。
  • 对表中的数据进行增、删、改的时分,索引也要动态保护,时刻本钱添加。

索引引用原则

  • 在常常需求查找的列上索引超出了数组边界什么意思,能够加速查找速度。
  • 在作为主键的列上,强制改列的仅有性和安排表中数据的摆放结构。
  • 在常常需求依据规划(<, <=, =, > ,>=, bet服务器ipween,in)进行查找的列上创立索引,由于索引现已排序,其指定的规划是连续的。
  • 在常常需求排序的(order by)de 列上创立索引,由于索引现已排序,这样查询能够运用索引的排序,加速排序时刻。
  • 在常常运用WHERE子句的列上面创立索引,加速条件的判别速度。
  • 关于那些只需很少数据或许重复至多的数据不应该添加索引。
  • 关于改列修改功用要求远大于服务器和电脑主机的差异检索功用时,不应该创立索引。(修改功用和检索功用时相互对立的)索引图

索引类型

  • 一般索引:这是最基本的索引类型,而且他们有仅有性之类的数据库技能束缚。
  • 仅有索引:这种索引和前面的 “一般索引“服务器 基本相同,但有一个服务器和电脑主机的差异差异:索引列的悉数值都只能呈现一次,即有必要仅有。
  • 主键索引:这是一种特别的仅有索引
  • 全文服务器怎样建立索引:MySQL从3.2二进制转十进制计算器3.23版开始支撑全文索引和全文检索。在MySQL中,全文索引的索引类型为FULLTEXT服务器租借。全文索引能够在VARCHAR二进制转八进制或许TEXT类型的列上创立。它能够经过CREATE TABLE指令创立,也能够经过二进制ALTER TABLE或CREATE INDEX指令创立。关于大规划的数据集,经过ALTER TABLE(或许CREATE I数据库体系NDEX)指令创立全文索引要比把二进制怎样算记载刺进带有全文索mysql增修改查句子引的空索引有哪几种类型表更快。
联合索引(组合索引)

联合索引遵循最左匹配原则:假定你的SQ索引超出了数组边界什么意思L句子顶用到了联合索服务器ip引中最左变的索引,那么这条SQL句子就能够运用这个联合索引去进行匹配,当遇到服务器规划查询(>、<、between、like)就会中止匹配。

实例:

联合索引的定义为(MySQL):

ALTER TABLE table_name ADD INDEX (col1,col2,col3);

若多个一条SQL,需求多个用到两个条件

SELE数据库体系概论第五版课后答案CT * FROM user_info WHERE username=’XX’,password=’XXXXXX’;

当索引在检索 password字段的时分,数据量大大缩小,索引的射中率减小,增大了索引的功率。

符合索引的索引体积比单独索引的体积要小,而且仅仅一个服务器ip索引树,比较单独列的索引要愈加的节省时刻复杂度和空间复杂度

当创立(col1,col2,col3)联合索引时,相当于创立了(col)单列索引,(clo1,clo2)联合索引以及(col1,col2,col3)联合索引想要索引生效,只能运用col1col1,col2col1,col2,col3三种组合;当然,col1,col服务器装备3组合也能够,但实际上二进制八进制十进制十六进制转换只用索引页是哪一页到了服务器col1的索引,col3并没有用到!

Mysql 索引、字符集、数据类型学习汇总

联合索引相当于一个依照姓氏——名字的一个电话簿,只能先确定姓氏才索引超出了数组边界什么意思能够射中索引,服务器下列能够正确射中联合索引的句子数据库设计=IN直接的字段都能够乱序,MySQL的查询优化器能够优化成mysql安装索引辨认的办法)

-- 只射中 col1,col2
SELECT * FROM `table_name` WHERE `col1`='XX';
-- 射中col1,col2mysql索引。col1,col2的次第能够倒置
SE数据库体系LECT * FROM `table_name` WHERE `cl数据库原理及使用o1`='XX',`clo2`='XXX';
SELECT * FROM `table_namysql数据库me` WHERE `clo2`='XXX', `clmysql数据库命令大全o1`='XX';
-- 射中col1,col2,col3,同理,三个列的顺能够倒置
SELECT * FROM `table_name` WHERE `col1`='X',`col2`='XX',`col3`='XXX';
SELECT * FROM `table_name` WHERE `col1`='X',`col3`='XX',`col2`='XXX';
SELECT * FROM `table_name` WHERE `col2`='X',`col3`='XX',`col1`='XXX';


字符集 utf8 和 utf8mb4 的差异

  1. 原版utf8规范的字符是字节变长的
  2. 变长utf8在存储形状上不利于做检索,所以mysql把它做成定长的存储(3个字节)
  3. 原本3字节的utf8现已能够掩盖这个世界上的悉数言语,直到emoji等符索引有哪几种类型号的呈现,让字符集大大扩服务器租借多少钱一年展,导致utf8开始呈现一些四字节的符号
  4. mysql又索引超出矩阵维度不能改原本的规范(否则在各种范畴都会有兼容性的问题),只能把这种定长四字节的utf8当作一种新的字符集来处理,叫做utf8mb4

假定要在 MySQL中保存 4 字节长度的 UTF-8 字符,就需求运用 utf8mb4 编码,可是要留神只需 5.5.3 版别往后的MySQL才支撑(检查版别指令: select version())。为了获取更好的兼容性,主张运用 utf8mb4 而非 utf8. 关于CHAR类型数据,utf8mb4会多消耗一些空间mysql安装装备教程,但依据 MySQL二进制官方主张,能够运用 VARCHAR 代替 CHAR。



数据类型

数值类型

MySQL支撑悉数规范SQL数值数据类型。

这些类型包括严峻数值数据类型(INTEmysql安装装备教程GERSMALLINTDECIMALNUMERIC),以及近似数值数据类型(FLOATREALDOUBLE PRECISION)。

关键字INT是INTEGER的近义词,关键字DEC是DECIMAL的近义词。

BIT数据类型保存位字段值,而且支撑My索引符号标明的意义ISAM、MEMORY、InnoDB和BDB表。

作为SQL规范的扩展,MySQL也支撑整服务器和电脑主机的差异数类型TINYINT、MEDIUMINT和BIGINT。下面的表闪现了需求的每个整数类型的存储和规划。

类型 大小 规划(有符号) 规划(数据库管理体系无符号) 用处
TINYINT 1 byte (-128,127) (0,255) 小整数值
SMALL服务器装备INT 2 bytes (-32 768,32 767) (0,65 535) 大整数值
MEDIUMINT 3 bytes (-8 388 608,8 388 607) (0,16 777 215)索引 大整数值
INT或INTEGER 4 bytes (-2 147 483 648,2 147 483 647) (0,4 294 96数据库体系概论第五版课后答案7 295) 大整数值
BIGINT 8 bytes (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) (0,18二进制 446 744 073 709 551 615) 极大整数值
FLOAT 4 bytes (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-mysql面试题38,3.402 823 466 E+38) 单精度浮点数值
DOUBLE 8 bytes (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-mysql数据库308),0,(2.225 07数据库体系概论第五版课后答案3 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 0,(数据库技能2.225 073 858 507 201 4 E索引有哪几种类型-308,1.79二进制转十进制计算器7 693 134 862 315 7 E+308) 双精度浮点数值
DECIMAL 对DECIMAL(M,D) ,假定M>D,为M+2否则为D+2 依赖于M和D的值 依赖于M和D的值 小数值
###### 日期和时刻类型
标明时刻值的日期和时刻类型为DATETIMEDATETIMESTAMPTIME和YEAR

每个时刻类型有一个有效值规划和一个”零”值,当指定不合法的mysql增修改查句子MySQL不能表数据库设计明的值时运用”零”值。

TIMESTAMP类型有专有的自动更新特性,将在后边描绘。

类型服务器租借多少钱一年 大小( bytes) 规划 格局 用处
DATE 3 1000-01服务器体系-01/9999-12-31数据库体系概论第五版课后答案 YYYY-MM-DD 日期值
TIME 3 ‘-838:59:59’/’838:59:59’ HH:MM:SS 时刻值或继续时刻
YEAR 1 1901/2155 YYYY 年份值
DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59索引是什么意思:5二进制9 YYYY-Mmysql创立表M-DD HH:MM:SS 混合日期索引图和时刻值数据库原理及使用
TIMESTAMP 4 1970-01-01 00:00:00/2038 结束时刻是第 214748索引有哪几种类型3647 秒,北服务器ip京时刻 2二进制计算器038-1-19 11:14:07,格林尼治时刻 2038年1月19日 清晨 03:14:07 YYYYMMDD HHMMSS 混合日期和时刻值,时刻戳
###### 字符串类型
字符串类型指CHARVARCHARBINARYVARBINAR数据库原理及使用YBLOBTEXTENUM和SET。该节描绘了这些类型怎样作业二进制以及怎样在查询中运用这些类型。
类型 大小 用处
CHAR 0-255 bytes 定长字符串
VAmysql面试题RCHAR 0-索引超出矩阵维度65535 bytes 变长字符串
TINYBLOB 0-255 bytes 不超过 255 个字符的二进制二进制字符串
TINYTEXT 0-255 bytes 短文本字符串
BLOB 0-65 535 bytes 二进制办法的长文本数据
TEXT 0-65 535 bytes 长文本数据
MEDIUMBLOB 0-16 777 215 bytes 二进制办法的中等长度文本数据
MEDIUMTEXT 0-16 777 215 bytes 中等长度文本数据
LONGBLOB 0-4 294 967 295 bytes 二进制办法的极大文本数据
LONGTEXT 0-4 294 967 295 bytes 极大文本数据
留神:char(n) varchar(n) 中括号中 n 代表字符的个数,并不代表字节个数,比方 CHAR(30) 就能够存储 30 个字符。

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

BINARYVARBINARY类似于 CHAR VARCHAR,不同的是它们包括二进制字符串而不要非二进制字符串。也便是说,它mysql怎样读们包括字节字符串而不是字符字符串。这说明它们没有字符集,而且排序和服务器怎样建立比较依据列值字节的数值值。

BLOB 是一个二进制大目标,能够容纳可变数量的数据。有 4 种 BLOB类型:TINYBLOBBLOBMEDIUMBLOBLONGBLOB。它们差异在于可容纳存储规划不同。

有 4 种 TE索引超出了数组边界什么意思XT 类型:TIN索引符号标明的意义YTEXTTEXTM服务器和电脑主机的差异EDIUMTEXTLONGT索引页是哪一页E数据库体系的核心是XT。对索引应的这 4 种 BLOB 类型,可存储的最大长度不同,可根服务器租借据实际情况挑选。


varchar、text和blob

textblomysql暗码忘记了怎样办b两种数据类型,它们的规划初衷是为了存储大数据运用的,MySql单行最大数据量为64K。

textvarchar是一组既有差异又有联络的数据类型,其联络在于当varchar(M)的M大于某些数值时,varchar会自动转为text

  • M数据库&g数据库体系概论第五版课后答案t;255时转为tinytext数据库体系
  • M>500时转为text
  • M>20000时转为mediumtext

所以索引符号过大的内容varchar和text没有差异数据库期末考试题及答案,同伴varchar服务器操作体系银河麒麟(M)和text的差异在于:

  • 单行64K即65535字节的空间,varchar只能用63352/65533个字节,可是text能够65535个字节悉数用起来
  • text能够指定text(M),可是M不论等服务器操作体系银河麒麟于多少都没数据库有影响
  • text不容许有默认值,varchar容许有默认值

varchartext两种数据类型,能用varchar就用varchar而不用text服务器ip(存储mysql面试题功率高)varchar(M)M有长度束缚,之前说过,假定mysql索引大于束缚,能够运用mediumtext(16M)或许longtext(4G)

textblo数据库期末考试题及答案b,便是text存储的是字符串而blob存储的是二进制字符串,blob是用于存储例如图片、音视频这种文件的二进制数据的。

参考资料

blog.csdn.net/wangfeijiu/…
www.cnblogs.com/wongdw/p/12…
www.runoob.com/mysql/mmysql增修改查句子ysql…