SQL mysql优化
慢查詢
如何通過(guò)慢查日志發(fā)現(xiàn)有問(wèn)題的SQL?
- 查詢次數(shù)多且每次查詢占用時(shí)間長(zhǎng)的SQL
- pt-query-digest分析前幾個(gè)查詢
- IO大的SQL
- pt-query-diges分析中的Rows examine項(xiàng)
- 未命中索引的SQL
- pt-query-digest分析中Rows examine 和Rows Send的對(duì)比
如何分析SQL查詢
- 使用explain查詢SQL的執(zhí)行計(jì)劃
? explain select custome_id,first_name,last_name from customers; - explain返回列的含義
table:顯示這一行的數(shù)據(jù)是哪張表的
type: 這是重要的列,顯示連接用了何種類(lèi)型,從最好到最差的類(lèi)型為
const,eq_reg、ref、range、index、ALL
possible_keys: 顯示可能應(yīng)用在這張表中的索引,如果未空,沒(méi)有可能的索引。
key:實(shí)際使用的索引。如果為NULL,則沒(méi)有使用索引。
key_len:使用的索引長(zhǎng)度。在不損失精確性的情況下,長(zhǎng)度越短越好
ref:顯示索引被哪一列使用了,如果可能的話是一個(gè)常數(shù)
rows:MYSQL認(rèn)為必須檢查的用來(lái)返回請(qǐng)求數(shù)據(jù)的行數(shù)。 - 需要注意的返回列
- Using filesort:看到這個(gè)的時(shí)候,查詢就需要優(yōu)化了,MYSQL需要進(jìn)行額外的步驟來(lái)發(fā)現(xiàn)如何對(duì)返回的行排序。它根據(jù)連接類(lèi)型以及存儲(chǔ)排序鍵值和匹配條件的全部行的行指針來(lái)排序全部行。
- Using temporary 看到這個(gè)的時(shí)候就需要優(yōu)化了。這里,MSQL需要?jiǎng)?chuàng)建一個(gè)臨時(shí)表來(lái)存儲(chǔ)結(jié)果,這通常發(fā)生在對(duì)不同的列進(jìn)行Order By上,而不是Group By上。
max()和Count()的優(yōu)化
查詢最后支付的時(shí)間-優(yōu)化max()函數(shù)
select max(payment_date) from payment
explain select max(payment_date) from payment建索引:
create index idx_paydate on payment(pay_date);在一條SQL中同事查出2006年和2007年的電影的數(shù)量--優(yōu)化count()函數(shù)
錯(cuò)誤的方式 select count(release_year='2006' or release_year='2006') from film; 分開(kāi)計(jì)算2006和2007年的電影數(shù)量 select count(*) from film where release_year='2006' AND release_year='2007';優(yōu)化:
select count(release_year='2006' or NULL)
select count(release_year='2076' or NULL)
備注:count(*)包含空值,count(某一列) 不包含某一列
子查詢優(yōu)化:
通常情況下,需要把子查詢優(yōu)化為join查詢,但在優(yōu)化時(shí)需要注意關(guān)聯(lián)鍵是否有一對(duì)多的關(guān)系。需要注意數(shù)據(jù)重復(fù)
groupby優(yōu)化:
通過(guò)關(guān)聯(lián)子查詢優(yōu)化
limit查詢的優(yōu)化:
limit常用于分頁(yè)處理,時(shí)常會(huì)伴隨order by 從句使用,因此大多時(shí)候會(huì)使用Filesorts這樣會(huì)造成大量的IO。
記錄上次返回的主鍵,在下次查詢時(shí)使用主鍵過(guò)濾。
索引優(yōu)化
pt-duplicate-key-checker \ -h 127.0.0.1 \ -uroot \ -p root \ --databases hand_sql \ --tables HAND_COURSE索引使用情況分析
pt-index-usage \ -u root \ -p root \ mysql-slow.log pt-query-digest --report /tmp/mysql-slow.log轉(zhuǎn)載于:https://www.cnblogs.com/renqiqiang/p/10129359.html
總結(jié)
以上是生活随笔為你收集整理的SQL mysql优化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 怎样能梦到自己想梦的人
- 下一篇: Mysql添加字段.md