常見sql技巧 優化

2021-08-07 01:36:20 字數 2236 閱讀 5131

1 正則  regexp 比like更消耗資源

select name, email from t where email regexp "@163[.,]com$"

select name, email from t where email like "%@163.com" ro email like "%@163,com"

2 rand()  提取隨機行

和order by一起使用,能把資料隨機排序

select * from t  order by rand() limit 5,  隨機抽取5行資料

3 利用group by 的 with rollup

with rollup  相比group by能聚集更多資訊

select * , count(pname) from demo group by cname,pname with rollup

4  外來鍵

innodb支援外來鍵   myisam不支援外來鍵, 不鼓勵使用外來鍵

foreign key(id) references outtable(id) on delete cascade on update cascade;

優化1 show 【session|global】status  各種sql執行頻率

session 預設 當前連線     global 資料庫啟動以來

show status like "com_select";

show status like "connections" 連線mysql數量

uptime 工作秒數     slow_queries 慢查詢次數

2 定位效率較低的sql語句 

慢查詢日誌      show  variables like "%slow";

3 對sql語句經行解析        explain    desc

expline/desc   select * from t;

看影響行數

索引的使用

1  like查詢  %不再第乙個字元,用到索引

2 is (not )  null 使用索引

3  or   and   前後都要加索引   才會用到索引

4 盡量避免使用巢狀查尋   select from where id in(select from )  外面不會用到索引 ,連線使用索引,使用連線  select * from t1 , t2   where

檢視索引的使用情況

show  status like "handler_read%"

handler_read_rnd_next 值高,需要建立索引

表優化檢查表: check

check table 表名  檢測乙個或多個表是否有錯

定期優化:  optimize  

optimize  table 表名    如過已經刪除表的一大部分,使用這個命令將表空間碎片合併

insert 語句優化

insert 插入多項值,避免每插入一次連線一次資料庫

group by  

如果需要,關掉排序    group by id order by  null;

in  巢狀查詢

不要用  select from where id in(select from )  外面不會用到索引 ,連線使用索引,使用連線  select * from t1 , t2   where

多使用中間表 

檢視:來表示熱門貼

多用列舉

伺服器優

1 字符集

伺服器,資料庫  客戶端   連線字符集  --- utf-8

配置檔案  default-character-set=utf-8    客戶端  連線

character-set-server=utf-8  伺服器 資料庫

collation-server=utf-8_general_ci  校驗字符集

2 改密嗎

1 關程序pkill mysql

2 跳過授權表   mysql --skip-grand-tables --user=mysql&

3 登入mysql  bu用密碼

4  修該密碼        update user set password=password("wei") where user = "root" and host="localhost"

5 再次登入

常見sql技巧

一 一些常見的sql實踐 1 負向條件查詢不能使用索引 not in not exists都不是好習慣 可以優化為in查詢 2 前導模糊查詢不能使用索引 而非前導模糊查詢則可以 3 資料區分度不大的字段不宜使用索引 原因 性別只有男,女,每次過濾掉的資料很少,不宜使用索引。經驗上,能過濾80 資料時...

sql優化技巧

1.比較運算子能用 就不用 增加了索引的使用機率 2.事先知道只有一條查詢結果時,使用 limit 1 limit 1 可以避免全表掃瞄,找到對應結果就不會再繼續掃瞄了 3.選擇合適的資料型別很重要 能用tinyint就不用smallint,能用smallint就不用int,磁碟和記憶體消耗越小越好...

Mysql常見優化技巧

mysql基礎打牢以後,優化就是一大難題。如何優化資料庫呢?這也是面試常見的問題,除了新增索引以外,我們還需要從這些方面考慮 1 sql語句和索引 程式猿常常考慮的難題 2 資料庫表結構 資料結構設計 3 系統配置 4 硬體 硬體和系統配置不做介紹,先簡單介紹一下mysql常見效能優化技巧 mysq...