mysql優化資料

2021-08-07 15:37:45 字數 1895 閱讀 6075

全表掃瞄是資料庫搜尋表的每一條記錄的過程,直到所有符合給定條件的記錄返回為止。通常在資料庫中,對無索引的表進行查詢一般稱為全表掃瞄;然而有時候我們即便新增了索引,但當我們的sql語句寫的不合理的時候也會造成全表掃瞄。

以下是經常會造成全表掃瞄的sql語句及應對措施:

1. 使用null做為判斷條件

如:select account from member where nickname = null;

建議在設計欄位時盡量將字段的預設值設為0,改為

select account where nickname = 0;

2. 左模糊查詢like %***%

如:select account from member where nickname like 『%***%』 或者 select account from member where nickname like 『%***』

建議使用

select account from member where nickname like 『***%』

如果必須要用到做查詢,需要評估對當前表全表掃瞄造成的後果;

3. 使用or做為連線條件

如:select account from member where id = 1 or id = 2;

建議使用union all,改為

select account from member where id = 1 union all select account from member where id = 2;

4. 使用in時(not in)

如:select account from member where id in (1,2,3)

如果是連續資料,可以改為

select account where id between 1 and 3;

當資料較少時也可以參考union用法;

或者:

select account from member where id in (select accountid from department where id = 3 )可以改為select account from member where id exsits (select accountid from department where id = 3)

not in 可以對應 not exists;

5.使用not in時

select account where id not in (1,2,3)

6.使用!=或<>時

建議使用 <,<=,=,>,>=,between等;

7.對字段有操作時也會引起權標索引

select account where salary * 0.8 = 1000 或者 select account where sustring(nickname,1,3) = 『zhangxiaolong』;

8.使用count(*)時

select count(*) from member;

建議使用select count(1) from member;

9.使用引數做為查詢條件時

select account from member where nickname = @name`

由於sql語句在編譯執行時並不確定引數,這將無法通過索引進行資料查詢,所以盡量避免;

mysql · 效能優化 · mysql常見sql錯誤用法

Mysql資料優化

1.linux上安裝mysql 虛擬機器上裝linux系統,啟動,ifconfig檢視當前linux,ip位址。通過遠端工具securecrtportable 遠端命令列進行連線 登入linux檢視當前mysql安裝包版本 rpm qa grep i mysql 解除安裝 rpm e mysql l...

MySql資料優化

更小的通常越好 更小的資料型別占用更小的磁碟空間,記憶體和cpu快取,並且處理時需要的cpu週期也更少 注意不能低估需要儲存的值的範圍 簡單就好 簡單資料型別的操作通常需要更少的cpu週期如整型比字元操作代價更低 使用mysql內建的型別而不是字串來儲存日期和時間 應該用整型儲存ip位址 避免nul...

Mysql海量資料優化

1.選擇合適的儲存引擎 兩個儲存引擎 myisam 和 innodb myisam合適count 但寫效能不好 innodb合適併發讀寫 事物 2.優化字段資料 3.為字段建立索引 4.避免使用select 5.使用 enum 而不是 varchar 6.盡可能的使用 not null 7.固定長度...