1. 程式人生 > >mysql資料庫sql語句的一些常用優化方法

mysql資料庫sql語句的一些常用優化方法

轉載請標明出處: 
http://http://write.blog.csdn.net/postedit/71422526
本文出自縌時針_

1.應儘量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用索引而進行全表掃描。

2.對在where中常用的欄位,可以適當建立合適的索引。

通常在mysql資料庫中,為一個表中加入索引,程式碼格式為:ALTER TABLE <表名> ADD INDEX (<欄位>);

例如:alter table test add index(t_name);

        可以通過describe  table_name來查看錶中索引等情況。

3.儘量避免在where子句中使用null值,否則將導致引擎放棄使用索引而進行全表掃描,如:

select id from t where age is null

   可以在age上設定預設值0,確保表中age列沒有null值,然後這樣查詢:

select id from t where age=0

4、儘量避免在 where 子句中使用 or 來連線條件,否則將導致引擎放棄使用索引而進行全表掃描,如:

select id from t where num=10 or num=20可以用select id from t where num=10union allselect id from t where
num=20
來替代

5、下面的查詢也將導致全表掃描:(不能前置百分號)

select id from t where name like ‘%c%’

     儘量不要使用前置百分號。

6、in 和 not in 也要慎用,否則會導致全表掃描,如:

select id from t where num in(1,2,3)

     對於連續的數值,能用 between 就不要用 in 了:

select id from t where num between 1 and 3

7、應儘量避免在 where 子句中對欄位進行表示式操作,這將導致引擎放棄使用索引而進行全表掃描。如:

select
id from t where num/2=100

     可以改為:

select id from t where num=100*2

8、應儘量避免在where子句中對欄位進行函式操作,這將導致引擎放棄使用索引而進行全表掃描。

9、不要在 where 子句中的“=”左邊進行函式、算術運算或其他表示式運算,否則系統將可能無法正確使用索引。

10、在使用索引欄位作為條件時,如果該索引是複合索引,那麼必須使用到該索引中的第一個欄位作為條件時才能保證系統使用該索引,否則該索引將不會被使 用,並且應儘可能的讓欄位順序與索引順序相一致。

11、很多時候用 exists 代替 in 是一個好的選擇:

select num from a where num in(select num from b)

用下面的語句替換:

select num from a where exists(select 1 from b where num=a.num)

12、並不是所有索引對查詢都有效,SQL是根據表中資料來進行查詢優化的,當索引列有大量資料重複時,SQL查詢可能不會去利用索引,如一表中有欄位 sex,male、female幾乎各一半,那麼即使在sex上建了索引也對查詢效率起不了作用。

13、索引並不是越多越好,索引固然可以提高相應的 select 的效率,但同時也降低了 insert 及 update 的效率,因為 insert 或 update 時有可能會重建索引,所以怎樣建索引需要慎重考慮,視具體情況而定。一個表的索引數最好不要超過6個,若太多則應考慮一些不常使用到的列上建的索引是否有 必要。

14.應儘可能的避免更新 clustered 索引資料列,因為 clustered 索引資料列的順序就是表記錄的物理儲存順序,一旦該列值改變將導致整個表記錄的順序的調整,會耗費相當大的資源。若應用系統需要頻繁更新 clustered 索引資料列,那麼需要考慮是否應將該索引建為 clustered 索引。

15、儘量使用數字型欄位,若只含數值資訊的欄位儘量不要設計為字元型,這會降低查詢和連線的效能,並會增加儲存開銷。這是因為引擎在處理查詢和連線時會 逐個比較字串中每一個字元,而對於數字型而言只需要比較一次就夠了。

16、儘可能的使用 varchar/nvarchar 代替 char/nchar ,因為首先變長欄位儲存空間小,可以節省儲存空間,其次對於查詢來說,在一個相對較小的欄位內搜尋效率顯然要高些。

17、任何地方都不要使用 select * from t ,用具體的欄位列表代替“*”,不要返回用不到的任何欄位。

18、拆分大的 DELETE 或 INSERT 語句。因為這兩個操作是會鎖表的,表一鎖住了,別的操作都進不來了,就我來說 有時候我寧願用for迴圈來一個個執行這些操作。

相關推薦

mysql資料庫sql語句一些常用優化方法

轉載請標明出處: http://http://write.blog.csdn.net/postedit/71422526本文出自縌時針_ 1.應儘量避免在 where 子句中使用!=或<&g

MySQL優化sql語句查詢常用方法

1.對查詢進行優化,應儘量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引。 2.應儘量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用索引而進行全表掃描。 3.應儘量避免在 where 子句中對欄位進行 null 值

mySQL資料庫Sql語句執行效率檢查--Explain命令

原文連結:https://www.jianshu.com/p/ea3fc71fdc45 EXPLAIN Output Columns 列名 說明 id 執行編號,標識select所屬的行。如果在語句中沒子查詢或

mysql資料庫sql語句備忘錄

Linux下載mysql安裝包:wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.16.tar.gz 1.mysql資料庫sql語句複製一個表的資料到另外一個表中 INSERT user_account ( mobil

MySQL資料庫 sql語句及其含義

本文主要記錄常用sql語句及對應意義,有一定基礎可直接檢視使用,需要學習者,可轉向另一篇博文  1、查詢語句  SELECT id,stuName,age,sex,gradeName FROM t_student ; 查詢表中全部資料(返回全部欄

Oracle SQL語句之常見優化方法總結

下面列舉一些工作中常常會碰到的Oracle的SQL語句優化方法:1、SQL語句儘量用大寫的; 因為oracle總是先解析SQL語句,把小寫的字母轉換成大寫的再執行。2、使用表的別名:  當在SQL語句中連線多個表時, 儘量使用表的別名並把別名字首於每個列上。這樣一來,就可以減

MySQL資料庫 SQL語句 筆記

今日內容介紹 1.MySQL資料庫 2.SQL語句 第一節課 1(MySQL資料庫)資料庫概念.avi 5分 2(MySQL資料庫)常見的資料庫.avi

淺談MySQL優化sql語句查詢常用的30種方法

系統資源 all 數據量過大 連續 don 問題 not sele 客戶端 1.對查詢進行優化,應盡量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引。 2.應盡量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用

淺談 MySQL優化 SQL 語句查詢常用的 30 種方法

個數 尋找 情況 don union all 子句 set 其他 算術 1、對查詢進行優化,應盡量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引。 2、應盡量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用索引

013-- mysql常用的查詢優化方法 淺談MySQL優化sql語句查詢常用的30種方法

淺談MySQL中優化sql語句查詢常用的30種方法   1.對查詢進行優化,應儘量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引。 2.應儘量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用索引而進行全

淺談MySQL優化sql語句查詢常用的30種方法(sql優化)

1.對查詢進行優化,應儘量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引。  2.應

mysql 優化sql語句的幾種方法

化sql語句的幾種方法 1、通過show status命令瞭解SQL的執行效率 show [session|global]status like 'com_%'; 2、定位執行效率較低的SQL語句 1)慢查詢   開啟方法 linux: 配置檔案(/etc/m

常用優化sql語句執行效率的方法

專案中優化sql語句執行效率的方法: 1)儘量選擇較小的列 2)將where中用的比較頻繁的欄位建立索引 3)select子句中避免使用‘*’ 4)避免在索引列上使用計算、not in 和<&g

MySql資料庫快速入門與常用sql語句

MySql資料庫入門與常用sql語句 1.常見資料庫 1.oracle資料庫(大型) ------oracle甲骨文 2.DB2資料庫(大型) ------IBM 3.sqlserver(中型) -----

一些mysqlsql語句

max type 西湖 管理員 order by tree 便宜 信息 user SELECT hou.*,uname FROM hos_house AS hou INNER JOIN sys_user AS usr INNER JOIN hos_type AS hty O

五、mysqlsql語句分類及常用操作

所表 desc 直接 常用操作 文件 ble div alter .cn 1.sql語句分類: DQL語句  數據查詢語言  select DML語句  數據操作語言  insert delete update DDL語句  數據定義語言  create drop

MySQLSQL語句優化步驟

MySQL查詢擷取分析步驟: 一、開啟慢查詢日誌,捕獲慢SQL 二、explain+慢SQL分析 三、show profile查詢SQL語句在伺服器中的執行細節和生命週期 四、SQL資料庫伺服器引數調優 一、開啟慢查詢日誌,捕獲慢SQL 1、檢視慢查詢日誌是否開啟 SHO

MySQL中一個sql語句包含in優化問題

col eat pre pan span mysq fin limit clas 第一版sql: SELECT module.id, module.module_name, module.module_code `module` where 92 IN (module

常用Mysql資料庫操作語句大全

學習連結:https://www.cnblogs.com/picaso/archive/2012/05/17/2505895.html 零、使用者管理: 1、新建使用者: >CREATE USER name IDENTIFIED BY ‘ssapdrow’; 2、更改

zbb20181206 mysql使用sql語句查詢資料庫所有表註釋已經表字段註釋

場景: 1. 要查詢資料庫 "mammothcode" 下所有表名以及表註釋 /* 查詢資料庫 ‘mammothcode’ 所有表註釋 */ SELECT TABLE_NAME,TABLE_COMMENT FROM information_schema.TABLES WHERE table