mysql的schema与数据类型优化分析

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

相关文章
相关标签/搜索