日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

SQL mysql优化

發(fā)布時(shí)間:2023/11/29 数据库 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL mysql优化 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

慢查詢

如何通過(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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。