Schema与数据类型优化:mysql
1.选择优化的数据类型sql
更小的一般更好:通常状况下,尽可能使用能够正确存储数据的最小数据类型函数
如:只需存0-200,tinyint unsigned更好。性能
简单就好:如:整型比字符串操做代价更低,应该使用mysql内建类型而不是字符串来存储日期和时间。优化
尽可能避免NULL:一般状况下最好指定列为NOT NULL,除非真的要存储NULL值。如:查询中包含可为NULL的列对mysql来讲更难优化。spa
2. 选择类型范围内存
如DATETIME和TIMESTAMP列均可以存储相同类型的数据(时间和日期,精确到秒),但TIMESTAMP只使用字符串
DATETIME一半的存储空间,而且会根据时区变化,具备特殊的自动更新能力。it
3.整数类型io
有两种类型的数字:整数和实数
若是存储整数,可以使用TINYINT(8),SMALLINT(16),MEDIUMINT(24),INT(32),BIGINT(64).
整数类型有可选的UNSIGNED属性,表示不容许负值,可以使正数上限提升一倍。如TINYINT UNSIGN能够存储的范围是0~255.
有符号和无符号使用相同的存储空间,并具备相同的性能。
4.实数类型:实数是带有小数部分的数字。
5.字符串类型:VARCHAR和CHAR是最主要的字符串类型。
VARCHAR:用于可变长字符串,比定长更省空间,由于它仅使用必要空间。
适合使用VARCHAR的状况:字符串列的最大长度比平均长度大不少;列的更新不多;
使用了UTF-8字符集
CHAR:是定长的,适合存储短的字符串,或全部值都接近同一个长度。如:存储密码的MD5值,
由于这是一个定长的值。对于常常变动的数据,CHAR也比VARCHAR好,由于定长类型不容易产生碎片。
对于很是短的列,CHAR比VARCHAR在存储空间上也更有效率。如:用CHAR(1)存储只有N和Y的值只需一个字节,
但用VARCHAR(1)却要两个字节,由于还有一个记录长度的额外字节。
使用varhar(5)和和char(5)存储‘hello’的空间开销是同样的,更长的列会消耗更多的内存。
6.mysql语句:
表增长列:alter table tableName add column columnName varchar(100);
删除表中的某列:alter table tableName drop column columnName;
修改表名:rename table tableName to newTableName;
为列设定别名:
select xie_id as id,
jun_name as name,
bo_age as age
from user;
从结果中删除重复行:select distinct columnName from tableName;//删除tableName中columnName重复的行
注:SQL语句中and运算优先于or运算执行。
聚合函数(集合函数):
count:计算表中记录数(行数)
sum:计算表中数值列的数据合计值
avg:计算表中数值列的数据平均值
max:求出表中任意列中数据的最大值
min:求出表中任意列中数据的最小值
计算行数:select count(*) from tableName;
计算某列平均值:select avg(columnName) from tableName;
计算某列最大值和最小值:select max(columnName1),min(columnName2) from tableName;
计算去除重复数据后的记录行数:select count(distinct columnName) from tableName;
group by: 对表进行分组
select columnName from tableName group by columnName;
指定升序或降序:
对结果集升序:select * From tableName order by columnName asc;
对结果集降序:select * from tableName order by columnName desc;
更新:update tableName set columnName = columnValue;
MOD:求余:
select columnName1, columnName2, MOD(columnName1,columnName2) as newColumnName from tableName;
获取当前日期:select current_date;
获取当前时间:select current_time;
获取当前日期和时间:select current_timestamp;
表的加法:union
(结果集不含重复项)
select columnName1,columnName2 from table1
union
select columnName3,columnName4 from table2;
(结果集含重复项)
select columnName1,columnName2 from table1
union all
select columnName3,columnName4 from table2;
联结:
内联结inner join
外联结outter join