建立索引,使用索引加快查詢速度
不要氾濫的使用索引
對於刪除、新增,效能降低
對於查詢、修改, 效能提公升
查詢時,不要使用select * ,因為會對所有列進行查詢,降低效能;
盡量使用具體的列名,代替select *;
優先考慮在 where 、 group by 後使用索引列;
查詢的時候盡量不要使用 in 或者not in,因為容易造成全表掃瞄;
使用模糊查詢關鍵字like,模糊字一定不要加在%左邊,要加在右邊;
盡量不要使用or,可能會導致全表掃瞄;
盡量不要在索引列上參與運算,會導致索引失效;
where後面盡量不要使用 is null 或者 is not null ,可能會導致索引失效;
where 後面不要加 1=1 會造成全表掃瞄;
連表盡量不要超過兩張表;
盡量避免大事務,盡量使用分頁查詢 分頁關鍵字(limit)
聯合索引 也會失效,列中包含非索引列 會失效。
某些大廠中的一些規範(例如途牛):
a.乙個查詢語句返回的行數不得超過200行
b.一條sql語句執行的時間 控制在200毫秒以內
ps:將資料插入到索引的過程:為了維護索引中字段的順序,會先在索引中查詢這個值,如果能找到,就把這個值插到後面空閒的地方,如果沒有找到,就先把值加入到葉子節點,然後在分支節點中新增這個值 和 指向葉子節點的指標(就是乙個位址)。這個過程中,如果某個頁滿了,還要新申請乙個空的頁,把滿的頁拆分開,把一半的索引資料放到空閒頁中,而且為了保證資料的一致性(這個插入操作是併發的,可能有幾十上百個執行緒同時進行),會給相關的索引頁加上閂鎖(一種更低階別的記憶體鎖)。
比如:update a set memo=『備註資訊』 where id = 100,因為更新的memo欄位上並沒有索引,所以不需要維護索引,
而update a set storeid=12345 where id = 100,只需要更新storeid欄位的索引,其他4個索引不需要維護。
MySQL一些常見查詢方式
1 查詢埠號命令 2 檢視版本號 3 檢視預設安裝的mysql的字符集 4 mysql預設編碼是latin1,如果儲存中文的話就會出現亂碼 配置方法 1 拷貝 usr local mysql support files下的任意乙個 cnf檔案到 etc my.cnf 我拷貝my default.cn...
SQL的一些技巧和優化
一 使用萬用字元技巧 1 不要過度使用萬用字元,如果其他操作符能達到相同的目的,應該使用其他其他操作符。2 在確實需要使用萬用字元時,除非絕對必要,否則不要把他們用在搜尋模式的開始處,把萬用字元置於搜尋模式的開始處,搜尋起來最慢。3 注意萬用字元的位置。如果放錯位置,可能不會返回想要的資料 二 使用...
一些關於SQL優化的總結
由於這個專案一直都是mysql所以寫點mysql的 1.資料儲存引擎的選擇,myisam 和 innodb 的選擇 innodb 一般都會選擇這個,但是如果真的涉及到一些不涉及增刪的表,可以考慮下myisam 該引擎不支援事務,不支援外來鍵,優點就是訪問速度快,如果都是查詢的話,這個儲存引擎可能會使...