目錄:
1.什么是索引:
2.索引優(yōu)缺點:
3.索引分類:
4.為什么使用索引:
5.索引結構:
6.聚簇索引和非聚簇索引:
7.索引的創(chuàng)建:
8.什么時候創(chuàng)建索引:
9.什么時候不用創(chuàng)建索引:
10.索引失效:
11.存儲過程:
12.函數(shù):
13.流程控制語句:
14.主鍵和唯一的區(qū)別:
15.事務的創(chuàng)建:
16.視圖:
17.mylsam和innodb的區(qū)別:
18.sql執(zhí)行順序:
19.join相關知識:
20.sql優(yōu)化:
21.讀鎖和寫鎖:
22.常見函數(shù):
23.常見數(shù)據(jù)類型:
24.ddl
25.dml
26.mvcc:
1.什么是索引:
索引是能快速查找數(shù)據(jù)的一種數(shù)據(jù)結構。索引通常以文件的形式存在,儲存在磁盤中。
2.索引優(yōu)缺點:
優(yōu)點:單值和范圍查詢效率高,降低了io成本和排序成本。
缺點:操作數(shù)據(jù)同時也要修改索引,索引操作數(shù)據(jù)變慢了,索引占用空間。
3.索引分類:
普通索引:僅加速查詢
唯一索引:加速查詢 + 列值唯一(可以有null)
主鍵索引:加速查詢 + 列值唯一(不可以有null)+ 表中只有一個
聯(lián)合索引:多列值組成一個索引,專門用于組合搜索,其效率大于索引合并
4.為什么使用索引:
因為mysql查詢數(shù)據(jù)時是一行一行進行查詢數(shù)據(jù)的,每一次查詢都會進行一次io操作,io操作消耗資源,所以通常使用索引來優(yōu)化。
5.索引結構:
B+tree:通過默認使用b+tree這種數(shù)據(jù)結構。
hash:hash這種結構單值查詢非??欤M行范圍查詢則失效了。memory引擎默認是hash結構。
6.聚簇索引和非聚簇索引:
聚簇索引:索引和數(shù)據(jù)是再一起的,通過找到了索引就找到了數(shù)據(jù),常見于innodb引擎。
非聚簇索引:索引和數(shù)據(jù)是分開的,常見于mylsam引擎。
7.索引的創(chuàng)建:
1.create index 索引名 on 表名(列名)
2.創(chuàng)建表時也可以同時創(chuàng)建索引。
8.什么時候創(chuàng)建索引:
主鍵默認創(chuàng)建索引,頻繁查詢的字段,排序的字段。
9.什么時候不用創(chuàng)建索引:
字段中數(shù)據(jù)大量重復,例如state:0\1。數(shù)據(jù)量小,不是經(jīng)常查詢的字段。
10.索引失效:
1.使用了or.
2.聯(lián)合索引時順序不對。
3.使用模糊查詢時剛開始不能使用%
4.使用了函數(shù)
11.存儲過程:
存儲過程可以看作一組sql語句的集合。
優(yōu)點:減少了sql的執(zhí)行次數(shù),提高了效率,例如正常需要查詢3次的sql語句,使用存儲過程,則只需要查詢一次了。
創(chuàng)建語法:
????create procedure 存儲過程名 (參數(shù)列表: in out inout)
????begin?
????存儲過程體
????end
調(diào)用語法:
? ? call 存儲過程名(參數(shù))
12.函數(shù):
函數(shù)跟存儲過程類似,但存儲過程可以返回0-多個值。而函數(shù)只能有一個返回值。
創(chuàng)建語法:
????create function 函數(shù)名
????begin?
????存儲過程體
????end
13.流程控制語句:
順序結構:從上到下依次進行。
分支結構:有多條路徑執(zhí)行。
? ? if函數(shù)、case
循環(huán)結構:循環(huán)執(zhí)行。
? ? while、loop、repeat
14.主鍵和唯一的區(qū)別:
相同點:都不能重復。
不同點:主鍵不能為空,唯一可以為空。
15.事務的創(chuàng)建:
隱式事務:默認開啟的事務,insert、update、delete
顯示事務:有明顯的開啟標志。
? ? ? ? 語法:開啟事務:set autocommint =0?
? ? ? ? ? ? ? ? ? ?執(zhí)行sql
? ? ? ? ? ? ? ? ? ? 結束事務:commit
16.視圖:
視圖可以看作一張?zhí)摂M的表,可以和普通的表一樣使用,封裝了一條sql語句。
17.mylsam和innodb的區(qū)別:
innodb:支持外鍵,行鎖,支持事務,表空間大。
mylsam:不支持外鍵,表鎖,不支持事務,表空間小。
18.sql執(zhí)行順序:
from --- on --- where --- group by ---- having ---- select --- order by --- limit
19.join相關知識:
inner join:內(nèi)連接,查詢兩張表相同部分。
left join: 左連接,左表全查,關聯(lián)右表相同的部分。
right join: 右連接,右表全查,關聯(lián)上左表相同部分。
full outer join: 全連接,查詢左右表所有數(shù)據(jù)。
20.sql優(yōu)化:
建立索引,盡量減少子查詢層數(shù),select 只列出需要查詢的字段。
21.讀鎖和寫鎖:
讀鎖:多個讀操作之間可以同時進行,互不影響。
寫鎖:讀操作不影響,但當寫入時,會阻礙其他的讀寫操作。
22.常見函數(shù):
1.字符函數(shù):?
? ? concat:字符拼接。
? ? length:獲取字符長度。
? ? substring:截取字符。
2.數(shù)學函數(shù):
? ? abs:絕對值。
? ? round:四舍五入
? ? mod:取余
3.日期函數(shù):
? ? now:當前時間
? ? date_formate:時間轉字符
? ? str_to_date:字符轉時間
4.流程函數(shù):
? ? if函數(shù)、case函數(shù)
5.聚合函數(shù)\分組函數(shù)
? ? avg:平均數(shù)
? ? sum:求和
? ? count:條數(shù)
? ? min:最小
? ? max:最大
23.常見數(shù)據(jù)類型:
int、double、float、decimal、char、varchar、text
date:年月日、time:時分秒、datetime:年月日時分秒、timestamp:時間戳
24.ddl
庫:
? ? 創(chuàng)建庫:creat database 庫名
? ? 刪除庫:drop database 庫名
表:
? ? 創(chuàng)建表:create table 表名 (字段名 類型, 字段名 類型)
? ? 修改表: alert table 表名?(字段名 類型, 字段名 類型)
? ? 刪除表: drop table 表名
25.dml
插入:
? ? insert into 表名 字段名 values 值
修改:
? ? update 表名 set 鍵=值 where?
刪除:
? ? delete from 表名 where?
26.mvcc:
mvcc主要為了提高并發(fā)的讀寫,不用加鎖就能讓多個事務并發(fā)讀寫。