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

相關文章
相關標籤/搜索