選取最適合的字段屬性
2、盡可能的把字段設(shè)置成NOT NULL,這樣在執(zhí)行查詢(xún)的時(shí)候,數(shù)據(jù)庫(kù)不用去比較NULL值。
使用連接(JOIN)來(lái)代替子查詢(xún)是(sub-Queries)
例:將客戶基本信息表中沒(méi)有任何訂單的客戶刪除掉
利用子查詢(xún)先從銷(xiāo)售信息表中將所有發(fā)出訂單的客戶ID取出,然后將結(jié)果傳遞給主查詢(xún)。使用子查詢(xún)可以一次性的完成很多邏輯上需要多個(gè)步驟才能完成的SQL操作,同時(shí)也可以避免事務(wù)或者表鎖死,并且寫(xiě)起來(lái)也很容易。但是,在某些情況下,子查詢(xún)可以被更有效率的連接(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è)步驟的查詢(xún)工作。
Union查詢(xún)可以把需要使用臨時(shí)表的兩條或者更多的select查詢(xún)合并成一個(gè)查詢(xún)中。在客戶端的查詢(xún)會(huì)話結(jié)束的時(shí)候,臨時(shí)表會(huì)被自動(dòng)刪除,從而保證數(shù)據(jù)庫(kù)的整齊、高效。使用union來(lái)創(chuàng)建查詢(xún)的時(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
使用外鍵
例如,外鍵可以保證每一條銷(xiāo)售記錄都指向某一個(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)型的字段來(lái)說(shuō),出現(xiàn)大量重復(fù)值是很有可能的情況
優(yōu)化查詢(xún)語(yǔ)句
在相同類(lèi)型的字段間進(jìn)行比較的操作。
例如:在一個(gè)date類(lèi)型的字段上使用yeae()函數(shù)時(shí),將會(huì)使索引不能發(fā)揮應(yīng)有的作用。
SELECT * FROM books WHERE name like“MySQL%”
最后,應(yīng)該注意避免在查詢(xún)中讓MySQL進(jìn)行自動(dòng)類(lèi)型轉(zhuǎn)換,因?yàn)檗D(zhuǎn)換過(guò)程也會(huì)使索引變得不起作用。
編輯:hfy
-
MySQL
+關(guān)注
關(guān)注
1文章
860瀏覽量
27923
發(fā)布評(píng)論請(qǐng)先 登錄
MySQL優(yōu)化之查詢(xún)性能優(yōu)化之查詢(xún)優(yōu)化器的局限性與提示
MySQL數(shù)據(jù)庫(kù):理解MySQL的性能優(yōu)化、優(yōu)化查詢(xún)

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

評(píng)論