1.在 資料庫內如何讓自動增加欄位從0開始 2.表中有A B C三列時,用SQL語句實現:當A列大於B列時選擇A列,否則選擇B列,當B列大於C列時選擇B,否則選擇C列 3. 是一個 存儲系統。支持五種數據類型: (1) (字元串) (2) (列表) (3) (`hash`表) (4) (集合) (5 ...
1.在mysql
資料庫內如何讓自動增加欄位從0開始
truncate table 表名
2.表中有A B C三列時,用SQL語句實現:當A列大於B列時選擇A列,否則選擇B列,當B列大於C列時選擇B,否則選擇C列
select case when A > B then A else B end, case when B > C then B else C end;
3.Redis
Redis
是一個key-value
存儲系統。支持五種數據類型:
(1)string
(字元串)
(2)list
(列表)
(3)hash
(hash
表)
(4)set
(集合)
(5)zset
(有序集合)
4.MyISAM
和InnoDB
的區別
MyISAM
特點
(1)不支持事務、外鍵
(2)支持表級鎖,不支持行級鎖
(3)擁有較高的查詢效率
InnoDB
特點
(1)支持事務、外鍵
(2)支持行級鎖,併發性更高,需要的花銷也更高
如果執行大量的select
,MyISAM
速度更快,如果執行大量的insert
或update
,InnoDB
速度更快。執行select count(*) from table
時,MyISAM
只是簡單的讀出保存好的行數,而InnoDB
要掃描整個表來計算有多少行,如果執行select count(*) from table where...
,兩種存儲引擎的操作是一樣的。
5.索引
索引在資料庫中的作用是快速找到某個列。不使用索引的話,MySQL
必須從第一條記錄遍歷導相關的行,索引能快速的達到某個位置取搜索數據文件。
四種索引分類:
(1)普通索引:最基本的索引,沒有任何的限制
(2)唯一索引:和普通索引類似,索引值必須唯一,但允許有空值
(3)主鍵索引:主鍵,特殊的唯一索引
(4)組合索引:將多列作為索引,用於組合搜索
索引特點:
索引能讓查詢數據的速度上升,而使寫入數據的速度下降。
索引不會包含有NULL值的列,所以在資料庫設計的時候不要讓欄位的預設值為NULL
一般情況下不鼓勵使用like操作,like "%aaa%"不會使用索引,而like "aaa%"可以使用索引
不要在列上進行運算
缺點:
(1)創建索引和維護索引需要時間成本
(2)創建索引需要占據磁碟的空間
(3)會降低表的增刪改的效率
6.MySQL
查詢性能優化
(1)避免向資料庫請求不需要的數據。避免使用select *
這種方式進行查詢,應該只返回需要的列。
(2)查詢數據的方式。可以通過添加合適的索引改善查詢數據的方法
(3)分解大的查詢。可以將一個大查詢切分為多個小查詢執行,比如將一個關聯查詢分解成多個單表查詢
(4)用IN()
代替OR
。對於IN()
的列表中有大量取值的時候,用IN()
替換OR
更快
(5)排序優化。應該儘量讓MySQL
使用索引進行排序
(6)子查詢優化。儘可能用關聯查詢替換子查詢,可以提高查詢效率
(7)優化MIN()
和MAX()
。對對應欄位添加索引
7.優化mysql
資料庫的方法
四個層面:
(1)SQL
及索引層面
(2)資料庫表結構層面
(3)系統配置層面
(4)硬體配置層面
SQL
及索引層面:
(1)使用MySQL
慢查詢日誌slow_query_log.log
對有效率問題的SQL
進行監控
(2)使用explain
查詢SQL
的執行計劃
(3)count()
和Max()
的優化;
(4)使用有索引的列或主鍵進行Order by
操作
(5)使用JOIN
來代替子查詢
(6)使用聯合UNION
來代替手動創建的臨時表
如何建立合適的索引:
(1)在where
從句,group by
從句,order by
從句,on
從句中出現的列
(2)索引欄位越小越好
(3)離散度大的列放在聯合索引前面
資料庫表結構層面:
(1)使用可以存下你的數據的最小的數據類型
(2)使用簡單的數據類型,int
要比varchar
類型處理上更簡單
(3)儘可能的使用not null
定義欄位
(4)儘量少用text
類型