深入浅出Mysql

二.sql基础

SQL 语句主要可以划分为以下 3 个类别:

DDL(Data Definition Languages)语句:数据定义语言,这些语句定义了不同的数据段、
数据库、表、列、索引等数据库对象的定义。常用的语句关键字主要包括 create、drop、alter

DML(Data Manipulation Language)语句:数据操纵语句,用于添加、删除、更新和查
询数据库记录,并检查数据完整性,常用的语句关键字主要包括 insert、delete、udpate 和
select 等

DCL(Data Control Language)语句:数据控制语句,用于控制不同数据段直接的许可和
访问级别的语句。这些语句定义了数据库、表、字段、用户的访问权限和安全级别。主要的
语句关键字包括 grant、revoke 等。

三.MySQL 支持的数据类型
深入浅出Mysql_第1张图片
image.png
  1. int 默认为 int(11)

2.浮点数和定点数都可以用类型名称后加“(M,D)”的方式来进行表示,“(M,D)”表示该
值一共显示 M 位数字(整数位+小数位),其中 D 位位于小数点后面,M 和 D 又称为精度和
标度。例如,定义为 float(7,4)的一个列可以显示为-999.9999

3.浮点数一般用于表示含有小数部分的数值。当一个字段被定义为浮点类型后,如果插入数据的精度超过该列定义的实际精度,则插入值会被四舍五入到实际定义的精度值,然后插入,四舍五入的过程不会报错。

4.定点数不同于浮点数,定点数实际上是以字符串形式存放的,所以定点数可以更加精确的保存数据(适用货币)

5.对含有 TEXT 和 BLOB 字段的表,如果经常做删除和修改记录的操作要定时执行OPTIMIZE TABLE 功能对表进行碎片整理

深入浅出Mysql_第2张图片
image.png
深入浅出Mysql_第3张图片
image.png
三.字符集

MySQL 的字符集和校对规则有 4 个级别的默认设置:服务器级、数据库级、表级和字段级。

四.设计索引的原则

1.搜索的索引列,不一定是所要选择的列。换句话说,最适合索引的列是出现在 WHERE 子句中的列,或连接子句中指定的列,而不是出现在 SELECT 关键字后的选择列表中的列

2.使用惟一索引。考虑某列中值的分布。索引的列的基数越大,索引的效果越好

3.使用短索引。如果对字符串列进行索引,应该指定一个前缀长度

4.利用最左前缀。

5.不要过度索引。每个额外的索引都要占用额外的磁盘空间,并降低写操作的性能

五.防止sql注入的应对措施

1.PrepareStatement+Bind-variable


深入浅出Mysql_第4张图片
image.png

2.使用应用程序提供的转换函数


深入浅出Mysql_第5张图片
image.png

3.自己定义函数进行校验:过滤非法字符:“’”、“;”、“=”、“(”、“)”、“/”、“/”、“%”、“+”、“”、“>”、“<”、“--”、“[”、“]”;

六.索引优化

1.查看索引使用情况


深入浅出Mysql_第6张图片
image.png

Handler_read_key : 值将很高,这个值代表了一个行被索引值读的次数,很低的值表明增加索引得到的性能改善不高,因为索引并不经常使用

Handler_read_rnd_next : 值高则意味着查询运行低效,并且应该建立索引补救。这个值的含义是在数据文件中读下一行的请求数。如果正进行大量的表扫描,Handler_read_rnd_next 的值较高,则通常说明表索引不正确或写入的查询没有利用索引

2.两个简单实用的优化方法

1)定期分析表和检查表
analyze table zuche.order:本语句用于分析和存储表的关键字分布,分析的结果将可以使得系统得到准确的统计信息,使得 SQL 能够生成正确的执行计划
check table zuche.order:检查表的作用是检查一个或多个表是否有错误。CHECK TABLE对MyISAM 和InnoDB表有作用

2)定期优化表:
optimize table order:这个命令可以将表中的空间碎片进行合并,并且可以消除由于删除或者更新造成的空间浪费,但OPTIMIZE TABLE 命令只对 MyISAM、BDB 和 InnoDB 表起作用

3.常用 SQL 的优化

1)优化group by:
MySQL 对所有 GROUP BY col1,col2....的字段进行排序。如果查询包括 GROUP BY 但用户想要避免排序结果的消耗,则可以指定 ORDER BY NULL禁止排序

你可能感兴趣的:(深入浅出Mysql)