選取最適合的字段屬性
2、盡可能的把字段設(shè)置成NOT NULL,這樣在執(zhí)行查詢的時(shí)候,數(shù)據(jù)庫(kù)不用去比較NULL值。
使用連接(JOIN)來(lái)代替子查詢是(sub-Queries)
例:將客戶基本信息表中沒(méi)有任何訂單的客戶刪除掉
利用子查詢先從銷售信息表中將所有發(fā)出訂單的客戶ID取出,然后將結(jié)果傳遞給主查詢。使用子查詢可以一次性的完成很多邏輯上需要多個(gè)步驟才能完成的SQL操作,同時(shí)也可以避免事務(wù)或者表鎖死,并且寫起來(lái)也很容易。但是,在某些情況下,子查詢可以被更有效率的連接(JOIN)替代。
SELECT * FROM customerinfo WHERE CustomerID NOT IN (SELECTC ustomerID FROM salesinfo)
SELECT * FROM customerinfo LEFT JOIN salesinfo ON customerinfo.CustomerID = salesinfo.CustomerID WHERE salesinfo.CustomerID ISNULL
Swift Code
連接(JOIN)之所以更有效率一些,是因?yàn)镸ySQL不需要在內(nèi)存中創(chuàng)建臨時(shí)表來(lái)完成這個(gè)邏輯上的需求兩個(gè)步驟的查詢工作。
Union查詢可以把需要使用臨時(shí)表的兩條或者更多的select查詢合并成一個(gè)查詢中。在客戶端的查詢會(huì)話結(jié)束的時(shí)候,臨時(shí)表會(huì)被自動(dòng)刪除,從而保證數(shù)據(jù)庫(kù)的整齊、高效。使用union來(lái)創(chuàng)建查詢的時(shí)候,只需要用union作為關(guān)鍵字把多個(gè)select語(yǔ)句連接起來(lái)就可以了(所有的select語(yǔ)句中的字段數(shù)目相同)
SELECT Name,BirthDate FROM author UNION
事務(wù)
BEGIN; INSERT INTO salesinfo SET CustomerID=14; UPDATE inventory SET Quantity=11 WHERE item=‘book’; COMMIT;
鎖定表
LOCK TABLE inventory WRITE SELECT Quantity FROM inventory WHERE Item=‘book’;
UPDATE inventory SET Quantity=11 WHERE Item=‘book’; UNLOCKTABLES
使用外鍵
例如,外鍵可以保證每一條銷售記錄都指向某一個(gè)存在的客戶。外鍵可以把customerinfo表中的CustomerID映射到salesinfo表中的CustomerID,任何的一條沒(méi)有合法CustomerID的記錄都不會(huì)被更新或者插入到salesinfo中。
NULL,PRIMARYKEY(CustomerID))TYPE=INNODB;
FOREIGNKEY(CustomerID) REFERENCES customerinfo(CustomerID) ON DELETE CASCADE)TYPE=INNODB;
使用索引
一般說(shuō)來(lái),索引應(yīng)建立在那些將用于JOIN,WHERE判斷和ORDERBY排序的字段上。盡量不要對(duì)數(shù)據(jù)庫(kù)中某個(gè)含有大量重復(fù)的值的字段建立索引。對(duì)于一個(gè)ENUM類型的字段來(lái)說(shuō),出現(xiàn)大量重復(fù)值是很有可能的情況
優(yōu)化查詢語(yǔ)句
在相同類型的字段間進(jìn)行比較的操作。
例如:在一個(gè)date類型的字段上使用yeae()函數(shù)時(shí),將會(huì)使索引不能發(fā)揮應(yīng)有的作用。
SELECT * FROM books WHERE name like“MySQL%”
最后,應(yīng)該注意避免在查詢中讓MySQL進(jìn)行自動(dòng)類型轉(zhuǎn)換,因?yàn)檗D(zhuǎn)換過(guò)程也會(huì)使索引變得不起作用。
編輯:hfy
-
MySQL
+關(guān)注
關(guān)注
1文章
891瀏覽量
28884
發(fā)布評(píng)論請(qǐng)先 登錄
MySQL數(shù)據(jù)庫(kù):理解MySQL的性能優(yōu)化、優(yōu)化查詢

盤點(diǎn)MySQL常見(jiàn)問(wèn)題及解答
如何優(yōu)化MySQL百萬(wàn)數(shù)據(jù)的深分頁(yè)問(wèn)題
淺談mysql自有方式采集獲取監(jiān)控數(shù)據(jù)

評(píng)論