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