Mysql 優化技術

2021-10-07 23:00:10 字數 2913 閱讀 1122

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個角度解釋...