1、查詢sql盡量不要使用select ※,而是使用具體的字段 select id
例如:
select id from test_table;
說明:select *查詢時,可能不會使用到覆蓋索引,導致回表查詢。
2、查詢結果只有一條記錄或者只要最大或最小的記錄,建議使用 limit 1
例如:
select id,name from test_table where name=
'shun'
limit
1;
說明:limit主要是防止全表掃瞄,從而提高效能。
3、盡量避免在where字句中使用or來作連線條件
錯誤例子:
select
*from test_table where id=
1or age=
2;
正確例子:使用union all 或者 分開寫sql
select
*from test_table where id=
1union
allselect
*from test_table where age=
2;
說明:使用or查詢可能會導致索引失效,從而全表掃瞄。
4、limit分頁優化
需求:作分頁時,一般會使用limit實現,當偏移量特別大時,查詢效率變低。
錯誤例子:
select id,name,age from test_table limit
10000,10
;
正確例子:
①返回上次查詢的最大偏移量,這樣可以跳過偏移量。
select id,name from test_table where id>
10000
limit
10;
②order by +索引查詢
select id,name from test_table order
by id limit
10000,10
;
5、優化like語句
把%放前面,不走索引
把%放關鍵字後面,走索引
例如:
select id,name from test_table where name like
'蔡%'
;
6、不要再where子句中對字段進行表示式操作
錯誤例子:
select
*from test_table where age-1=
10;
說明:這樣會導致索引失效,從而全表掃瞄。
7、inner join 、left join、right join,優先使用inner join,如果是left
join,左邊表資料比右邊表要小
連線型別
說明inner join 內連線
只保留兩張表中完全匹配的結果集
left join 左連線
會返回左表所有的行,即使在右表中沒有匹配的記錄
right join右連線
會返回右表所有的行,即使在左表中沒有匹配的記錄
錯誤例子:
select
*from test_table1 t1 left
join test_table2 t2 on t1.age = t2.age where t1.id>
2;
正確例子:
select
*from
(select
*from test_table1 where id>
2) t1 left
join test_table2 t2 on t1.age = t2.age;
說明:
使用左連線,條件語句放在左邊處理,意味著左邊返回的行數會變小,從而提高效能。
8、避免在where子句中使用!=或<>操作符
錯誤例子:
select age,name from test_table where age <>
18;
正確例子:分開兩條sql來寫
select age,name from test_table where age <18;
select age,name from test_table where age >
18;
說明:使用!=和<>可能會讓索引失效。
9、使用explain分析sql的計畫
explain
select
*from test_table where id=
2or age =
18;
說明:可以檢視是否有索引。
10、永遠為每張表設定乙個id
每張表都設定乙個id做為其主鍵,而且最好的是乙個int型的(推薦使用
unsigned),並設定上自動增加的auto_increment標誌。
11、使用enum而不是varchar
enum 型別是非常快和緊湊的。
比如「性別」,「國家」,「民族」,「狀態」,「部門」等,這些欄位的取值是有限而且固定的,應該使用enum 而不是varchar。
MySQL查詢優化技術之使用索引
索引是提高查詢速度的最重要的工具。當然還有其它的一些技術可供使用,但是一般來說引起最大效能差異的都是索引的正確使用。在mysql郵件列表中,人們經常詢問那些讓查詢執行得更快的方法 索引是提高查詢速度的最重要的工具。當然還有其它的一些技術可供使用,但是一般來說引起最大效能差異的都是索引的正確使用。在m...
MySQL資料庫的優化技術
對mysql 優化是乙個綜合性的技術 主要包括 a 表的設計合理化 3nf b 新增適當的索引 index 四種 普通索引 唯一索引 unique,主鍵索引 全文索引 full text 空間索引 復合索引 c 分表技術 水平分割 垂直分割 d 讀寫 update,delete,insert 分離 ...
再談MySQL的子查詢優化技術
朋友說 我這幾天看了子查詢的課程以及查閱了一些資料,給我的感受是 子查詢不怎麼好使,能不用就盡量不用,做過的專案很少採用子查詢,很多相關子查詢都可以上拉至連線查詢。稍微用的多一點的可能就是in查詢了 答覆 1 技術是通用的 通常都是上拉優化的思路,乙個概述可以參見 2 你這種感受,可以從2個角度解釋...