union
把2条或多条SQL的查询结果合并成一个结果集
注意:完全相等的行将会被合并,合并是比较耗时的操作,尽量避免合并,使用union all。
声明后如果不加unsigned,默认是带符号的
zerofill
作用:用于学号编码等固定宽度的数字
学号->001,012
M:总宽度,配合zerofill使用或在浮点数里使用
zerofill属性的列默认为unsigned
浮点列与定点列
float(M,D)
M:精度,表示总位数
D:标度,代表小数点后面的位数 float(5,2)表示小数点前最多3位,小数点后2位。
float/double:有精度损失
decimal:定点型,更精确。
字符型
char(10) 0-255
最多存10个字符,存一个字符会在右侧用空格补齐,也是占10个字符的长度,取出的时候会删除右侧的空格
varchar(10) 0-60000
最多存10个字符,会在行开始处用1-2个字节存额外的说明信息
enum与set的区别:enum2选1,set可多选。
主键
primary key此列不重复,能够区分每一行
auto_increment一张表只能有一个,且必须是索引(key/index)
视图
create view v3 as select name,age,sex from user;
view:sql的查询结果。如果视图的每一行是与物理表一一对应的,则可以增删改。如果view的行是由物理表多行经过计算得到的结果,则view不能更新。
存储:如果是比较简单的SQL语句,会把创建视图的语句存储起来,然后查询的时候合并语句去磁盘查找,如果是比较复杂的SQL,会先执行,结果放内存中,然后去临时表中查询。
索引
索引:(在MySQL中也叫键‘key’),是储存引擎用于快速找到记录的一种数据结构;
索引提高了查询速度,但降低了增删改的速度,一般在查询频繁的列上加索引,重复度低的列上加效果更好。key
普通索引unique key
唯一索引primary key
主键索引full text
全文索引(中文环境下,全文索引无效,要用分词+索引,一般用第3方解决方案sphinx)
多列索引,就是把两列或多列的值看成一个整体,然后建索引
冗余索引,一个列可能被多个索引覆盖
innodb:主索引文件上,直接存放该行数据,称为聚簇索引,次索引指向对主键的引用。
myisam:主索引和次索引都指向物理行。
索引覆盖:当查询的内容正好是索引的一部分,则不需要回行查找(磁盘查找)。
awk
while(还有下一行){
1.读取下一行,并把下一行赋给$0,各列赋给$1,$2,$n
2.用指定的命令来处理该行
}
awk '{printf("%s\n",$0)}' score.txt
mysqladmin -uroot ext|awk '/Queries/{printf("%d ",$4)}/Threads_connected/{printf("%d ",$4)}/Threads_running/{printf("%d ",$4)}'
explain
id
查询编号,有子查询会递增。select_type simple:简单查询。table
查询的表名或临时名。possible_keys
可能用到的索引key
实际用到的索引key_len
索引最大长度type
ALL:表示全表扫描
index:扫描所有索引节点
range:根据索引做范围的扫描。
ref:通过索引直接引用到某些数据行
eq_ref:直接定位到某一行
const,system,null:查询优化到常量级别,甚至不需要查找时间。ref
连接查询时,前表与后表的引用关系。rows
估计扫描了多少行extra
using index
using where
using temporary
using filesort
range checked for each necond
列选择的原则:
在都可选的情况下:int>date,time>enum,char,varchar>blog
整型,time运算快,节省空间
cahr,varchar会考虑字符集转换与排序时的校对集
Blog无法使用内存临时表
索引碎片与维护
在长期的数据更改过程中,索引文件和数据文件都将产生空洞,形成碎片。
alter table xxx engine innodb;
optimize table xxx;
修复表的数据及索引碎片,就会把所有的数据文件重新整理一遍,使之对齐,这个过程如果表的行数比较大,也是非常耗资源的操作,所以不能频繁的修复,如果表的update操作很频繁,可以按周/月来修复。
批量更新多条数据多个字段
mysqldump
mysqldump -uuser -ppwd -hhost --databases pa --tables pa_stat --where=‘left(minute_idx,6)=201809’ >/tmp/pa_stat_9.sql