MySQL單機優化 SQL優化

2023-01-25 05:21:10 字數 2299 閱讀 4422

sql

優化(變多次維護為一次維護

sql優化分為:ddl、dml、dql

一、ddl優化

1 、通過禁用索引來提供匯入資料效能 。 這個操作主要針對有資料庫的表,追加資料

//去除鍵

alter table test3 disable keys;

//批量插入資料

insert into test3 select * from test;

//恢復鍵

alter table test3 enable keys;

變多次索引維護為一次索引維護

2、 關閉唯一校驗

set unique_checks=0  關閉

//批量插入資料

insert into test3 select * from test;

set unique_checks=1  開啟

變多次唯一校驗為一次唯一校驗

3、修改事務提交方式(匯入

)set autocommit=0   關閉# false

//批量插入

set autocommit=1   開啟 true

變多次事務提交為一次事務提交

二、dml優化

insert into test (name) values(2);

insert into test values(1,3);

insert into test values(1,4);

//合併多條為一條 mybatis的批量操作:

insert into test values(1,2),(1,3),(1,4)

變多次事務提交為一次事務提交

三、dql優化

(1)   1 order by

優化1、多用索引排序

2、普通結果排序(非索引排序)

filesort

索引本身就是排序的,所以多使用索引

。(2)    group by

優化查詢某個時間的付款總和

explain

select date_format(payment_date,'%y-%m'),sum(amount) from payment group by date_format(payment_date,'%y-%m') ;

explain

select date_format(payment_date,'%y-%m'),sum(amount) from payment group by date_format(payment_date,'%y-%m') order by null;

在group by是使用

order by null,

取消預設排序

(3) subquery

巢狀優化

在客戶列表找到不在支付列表的客戶

#在客戶列表找到不在“支付列表”的客戶

, 查詢沒買過東西的客戶

explain

select * from customer where customer_id not in (select distinct customer_id from payment);

explain

select * from customer c left join payment p on(c.customer_id=p.customer_id) where p.customer_id is null   -- 這種是基於“索引”外鏈

(4)

or優化

在兩個獨立索引上使用or的效能優於

1、 or

兩邊都是用索引欄位做判斷,效能好!!

2、 or

兩邊,有一邊不用,效能差

3、 如果

employee

表的name

和email

這兩列是一個複合索引,但是如果是

:name='a' or email='b'

這種方式,不會用到索引!

(5)   limit

優化select film_id,description from film order by title limit 50,5;

select a.film_id,a.description from filqm a inner join (select film_id from film order by title limit 50,5)b on a.film_id=b.film_id

30種sql

語句優化:

SQL優化 MySQL優化(概述)

一 優化概述 資料庫效能取決於資料庫級的幾個因素,如表,查詢和配置設定。這些軟體結構導致cpu和i o操作在硬體級別,您必須最小化並儘可能高效。在處理資料庫效能時,首先要了解軟體方面的高階規則和準則,並使用掛鐘時間來衡量效能。當您成為專家時,您將進一步瞭解內部發生的事情,並開始測量cpu週期和i o...

mysql優化(4) sql優化小技巧

這裡對sql優化做一下簡單的總結 對查詢進行優化,要儘量避免全表掃描,首先應該考慮在where和order by 涉及的列上建立索引 避免在where子句中對欄位進行null值判斷,否則將導致引擎棄用索引而進行全表掃描 避免在where子句中使用 或 普通索引無法使用,但是主鍵索引會繼續走索引。避免...

Mysql優化3 資料庫Sql優化

1 通過show status 瞭解sql的執行頻率和時間 2 定位低效的sql語句 3 通過explain分析低效語句 4 確定問題並選擇優化措施 show status like uptime 啟動時間 show status like com select 查詢次數 show status l...