3.表中允許適當冗餘,譬如,主題帖的回覆數量和最後回覆時間等4. UNION ALL 要比UNION 快很多,所以,如果可以確認合併的兩個結果集中不包含重複數據且不需要排序時的話,那麼就使用 UNIONALL。>>UNION 和 UNION ALL 關鍵字都是將兩個結果集合併爲一個,但這兩者從使用和效率上來說都有所不同。>1. 對重複結果的處理:UNION 在進行錶鏈接後會篩選掉重複的記錄,Union All 不會去除重複記錄。>2. 對排序的處理:Union 將會按照字段的順序進行排序;UNION ALL 只是簡單的將兩個結果合併後就返回。
3.常用索引
1.普通索引: 即針對數據庫表創建索引
2.唯一索引: 與普通索引類似,不同的就是:MySQL 數據庫索引列的值必須唯一,但允許有空值
3.主鍵索引: 它是一種特殊的唯一索引,不允許有空值。一般是在建表的時候同時創建主鍵索引
4.組合索引: 爲了進一步榨取 MySQL 的效率,就要考慮建立組合索引。即將數據庫表中的多個字段聯合起來作爲一個組合索引。
4.MySQL數據庫索引的工作機制
數據庫索引,是數據庫管理系統中一個排序的數據結構,以協助快速查詢、更新數據庫表中數據。索引的實現通常使用 B 樹及其變種 B+樹
5.MySQL的基礎命令操作
1.MySQL 是否處於運行狀態:Debian 上運行命令 service mysqlstatus,在 RedHat上運行命令 service mysqld status
2.開啓或停止 MySQL 服務 :運行命令 service mysqld start 開啓服務;運行命令service mysqld stop 停止服務
3.Shell 登入 MySQL: 運行命令 mysql -u root -p
4.列出所有數據庫:運行命令 show databases;
5.切換到某個數據庫並在上面工作:運行命令 use databasename; 進入名爲databasename 的數據庫
6.列出某個數據庫內所有表: show tables;
7.獲取表內所有 Field 對象的名稱和類型 :describe table_name;
6.MySQL的複製原理及流程
Mysql 內建的複製功能是構建大型,高性能應用程序的基礎。將 Mysql 的數據分佈到多個系統上去,這種分佈的機制,是通過將 Mysql 的某一臺主機的數據複製到其它主機(slaves)上,並重新執行一遍來實現的。* 複製過程中一個服務器充當主服務器,而一個或多個其它服務器充當從服務器。
readbuffersize >是 MySQL 讀入緩衝區大小。對錶進行順序掃描的請求將分配一個讀入緩衝區,MySQL 會爲它分配一段內存緩衝區。readbuffersize 變量控制這一緩衝區的大小。如果對錶的順序掃描請求非常頻繁,並且你認爲頻繁掃描進行得太慢,可以通過增加該變量值以及內存緩衝區大小提高其性能。
14.一張表中僅有一個varchar(N)類型的字段,utf8編碼,N的最大值爲多少?
由於 utf8 的每個字符最多佔用 3 個字節。而 MySQL 定義行的長度不能超過65535,因此 N 的最大值計算方法爲:(65535-1-2)/3。減去 1 的原因是實際存儲從第二個字節開始,減去 2 的原因是因爲要在列表長度存儲實際的字符長度,除以 3 是因爲utf8 限制:每個字符最多佔用 3 個字節。
15.(select *)和(select 全部字段)的優缺點
(select *)要解析數據字典,(select 全部字段)不需要
結果輸出順序,(select *)與建表列順序相同,(select 全部字段)按指定字段順序。
表字段改名,(select *)不需要修改,(select 全部字段)需要改
(select 全部字段)可以建立索引進行優化,(select *)無法優化
(select 全部字段)的可讀性比(select *)要高
16.having子句和where的異同點
語法上:where 用表中列名,having 用 select 結果別名
影響結果範圍:where 從表讀出數據的行數,having 返回客戶端的行數
索引:where 可以使用索引,having 不能使用索引,只能在臨時結果集操作
where 後面不能使用聚集函數,having 是專門使用聚集函數的。
17.MySQL記錄不存在時insert,當記錄存在是update
INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEYUPDATE c=c+1;
18.MySQL中的insert和update的select語法
insert into student (stuid,stuname,deptid)
select 10,'zhangsan',3
from student where stuid > 8;
update student a inner join student b
on b.stuID=10 seta. stuname=concat(b.stuname, b.stuID)
where a.stuID=10 ;