1. SQL優化的原則: 儘早,高效地過濾數據,避免無效的運算.數據庫
查詢數據量大的數據儘可能避免用join 寧肯一次將一張表的數據查出來再用這些數據去作查詢也不要用過多的使用join 儘可能分紅屢次查詢來作數據庫設計
2. 索引優化
用戶沒法看到索引.spa
更新帶索引的表花更長的時間,所以要僅在常被搜索的列(以及表)上建立索引.設計
若是您但願以降序索引某個列中的值,您能夠在列名稱以後添加保留字 DESC:orm
CREATE INDEX PersonIndex ON Person (LastName DESC) 排序
咱們隨機向裏面插入了10000條記錄,其中有一條:5555, admin。在查找username="admin"的記錄 SELECT * FROM mytable WHERE username='admin';時,若是在username上已經創建了索引,MySQL無須任何掃描,即準確可找到該記錄。相反,MySQL會掃描全部記錄,即要查詢10000條記錄。索引
MySQL索引類型包括:ip
(1)普通索引INDEXci
這是最基本的索引,它沒有任何限制
(2)惟一索引 UNIQUE INDEX
它與前面的普通索引相似,不一樣的就是:索引列的值必須惟一,但容許有空值。若是是組合索引,則列值的組合必須惟一。
(3)主鍵索引 PRIMARY KEY
它是一種特殊的惟一索引,不容許有空值。通常是在建表的時候同時建立主鍵索引
(4)組合索引
MySQL組合索引「最左前綴」的結果。簡單的理解就是隻從最左面的開始組合
(5)創建索引的時機
到這裏咱們已經學會了創建索引,那麼咱們須要在什麼狀況下創建索引呢?通常來講,在WHERE和JOIN中出現的列須要創建索引,但也不徹底如此,由於MySQL只對<,<=,=,>,>=,BETWEEN,IN,以及某些時候的LIKE纔會使用索引
(6)索引的不足之處
◆雖然索引大大提升了查詢速度,同時卻會下降更新表的速度,如對錶進行INSERT、UPDATE和DELETE。由於更新表時,MySQL不只要保存數據,還要保存一下索引文件。
◆創建索引會佔用磁盤空間的索引文件。通常狀況這個問題不太嚴重,但若是你在一個大表上建立了多種組合索引,索引文件的會膨脹很快。
(7)使用索引的注意事項
使用索引時,有如下一些技巧和注意事項:
◆索引不會包含有NULL值的列
只要列中包含有NULL值都將不會被包含在索引中,複合索引中只要有一列含有NULL值,那麼這一列對於此複合索引就是無效的。因此咱們在數據庫設計時不要讓字段的默認值爲NULL。
◆使用短索引
對串列進行索引,若是可能應該指定一個前綴長度。例如,若是有一個CHAR(255)的列,若是在前10個或20個字符內,多數值是唯一的,那麼就不要對整個列進行索引。短索引不只能夠提升查詢速度並且能夠節省磁盤空間和I/O操做。
◆索引列排序
MySQL查詢只使用一個索引,所以若是where子句中已經使用了索引的話,那麼order by中的列是不會使用索引的。所以數據庫默認排序能夠符合要求的狀況下不要使用排序操做;儘可能不要包含多個列的排序,若是須要最好給這些列建立複合索引。
◆like語句操做
通常狀況下不鼓勵使用like操做,若是非使用不可,如何使用也是一個問題。like 「%aaa%」 不會使用索引而like 「aaa%」可使用索引。
◆不要在列上進行運算
select * from users where YEAR(adddate)<2007;
將在每一個行上進行運算,這將致使索引失效而進行全表掃描,所以咱們能夠改爲
select * from users where adddate<‘2007-01-01’;
◆不使用NOT IN和<>操做
————————————————
版權聲明:本文爲CSDN博主「@溪竹」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連接及本聲明
3. 基本操做:
a) Max(): SELECT MAX(OrderPrice) AS LargestOrderPrice FROM Orders
結果集相似於:
LargestOrderPrice
2000
b) Insert into插入多行:
INSERTINTOstudentVALUES(1,"qf",3),(2,"lap",4),(3,"qfa",8) //一開始同時執行多條insert into操做,發現會報錯,是數據庫軟件的問題.
c) Varchar(255):表示最大長度爲255個字符(即255個字節),C++中char的長度是一個字節