高效能MySql演化論 十一 常見查詢語句的優化

2022-04-09 12:34:30 字數 1348 閱讀 9018

高效能mysql演化論(十一):常見查詢語句的優化,總結一下常見查詢語句的優化方式。

1. count的作用

· count(table.filed)統計的該字段非空值的記錄行數

· count(*)或者是count(not nullable field) 統計的是全表的行數

如果要是統計全表記錄數,count(*)效率會比count(not nullable field)要高一點

2. myisam的count

一般執行count操作時需要掃瞄大量的記錄,但是在myisam引擎的資料庫中,資料庫把錶的記錄數儲存起來,所以coun(*)會非常的快(前提是不包含where條件)

3. 當需要頻繁的使用count時,可以考慮使用彙總表的策略

4. 優化小例子

在myisam中進行範圍查詢時,可以減少檢索行數的小技巧

原始的:select count(*) from dictionary where id>5.

優化後:select (select count(*) fromdictionary)-count(*) from dictionary where id<=5

減少查詢次數

優化前:需要兩條語句

select count(*)from student where area=』sh』

select count(*)from student where area=』bj』

優化後:合併成一條

select count(area='sh') as shcount, count(area='bj') as bjcount from student;

1. 確保on或using的字句上有索引

2. 一般情況下只需要在第二個表上建立索引

3. 盡量使 group by/order by的表示式中只包含乙個表的字段

盡量用關聯代替子查詢

1. 當對關聯查詢執行group by操作時,使用查詢表的標識列作為分組條件效率會比較高

2. 當需要查詢的非group by指定的字段時,正常情況下是無法執行的,可以通過inner join 的形式來彌補

select firstname, lastname

from actor

inner join(select actor_id, count(*) as cnt from actor group by(actor_id))

using (actor_id)

select field1,field2,field3

from table1

inner join

(select id from table1 limit 100, 20) as temp

using(id)

高效能MySql演化論 八 表以及索引的維護

為了擁有高效能的資料庫,建立良好的表結構以及索引是必不可少的,與此同時對於表以及索引的維護也很重要 資料庫表損壞的原因很多,作業系統問題,硬體問題,或者是手工的修改了mysql的資料檔案,都會導致表的損壞。當出現問題時可能會導致查詢行為的異常,具體的異常行為在不同版本的資料庫中都不同。當發現資料庫的...

高效能MySql演化論 三 ID 標示符 的選擇

在設計資料庫表結構的時候,通常情況下每張表結構都有乙個字段作為id,因為 id會被用來做查詢,join,fk等操作,所以id設計的好壞對效能的影響很大。在為id選擇合適的型別的時候不僅需要考慮這種型別在資料庫中儲存所占用的空間,還需要考慮該型別在計算或者是值比較時的特性,例如bit型別儲存的時候是二...

高效能MySql演化論 三 ID 標示符 的選擇

在設計資料庫表結構的時候,通常情況下每張表結構都有乙個字段作為id,因為 id會被用來做查詢,join,fk等操作,所以id設計的好壞對效能的影響很大。在為id選擇合適的型別的時候不僅需要考慮這種型別在資料庫中儲存所占用的空間,還需要考慮該型別在計算或者是值比較時的特性,例如bit型別儲存的時候是二...