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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

系统优化怎么做-SQL优化

發布時間:2025/3/21 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 系统优化怎么做-SQL优化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

數據庫很重要!很重要!很重要! 重要的事情說三遍。所以單獨用一篇來講述SQL怎么優化。不過這里說到一點,不建議在業務代碼里寫很多復雜業務SQL,基本盡可能的減少 join,子查詢 等,也就說盡量在應用層來解決問題,降低產生低效SQL的概率,數據庫只是完成數據存儲及最簡單查詢的組件。

SQL優化

主要4個方向,以下4個方向盡可能達到了,SQL的執行效率就提高了。

  • 避免全表掃描
  • SQL中盡可能不使用臨時表
  • 減小查詢中間結果集大小
  • 盡可能命中索引
  • 發現慢SQL

    DBA開啟MySQL的慢查詢日志,對每日數據庫慢查詢進行監控。慢查詢后每日匯總提供開發進行處理。DBA給出指導意見。

    分析執行計劃
    主要看對SQL的執行過程中

    explain [extended] select … from … where …

    得到結果是


    其中 table 表示是哪個表的數據。

    • type比較重要。表示鏈接的類型。鏈接類型由好到壞的,依次是 system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL 一般情況,至少要達到 range 級別,最好是 ref 級別。否則可能會有性能問題。
    • possible_keys 是指可以應用到該表的索引,如果為NULL則沒有。
    • key 是指用到的索引。
    • key_len 是索引的長度,在不影響查詢精度的情況下,值越小越好。
    • ref 是指索引的那一列被使用了。一般會是個常數。
    • rows 是指有多少行。
    • extra 是指額外的信息。也是比較重要的。如果值為 distinct ,說明mysql 找到了域行聯合匹配的行,就不再查找了。
  • 如果值為 not exits : mysql優化了 left join ,一旦找到了 left join 匹配的行,便不再進行搜索了。
  • 如果值為 rang checked for each : 沒有找到理想的索引。
  • 如果為 using filesort ,則需要改進sql了。這說明 mysql執行 需要 文件排序。這是比較影響效率的。
  • 如果為 using temporary , 這是使用了 臨時表。 這種情況也比較影響效率,sql需要改進。或者從應用層進行改進。
  • 如果為 where used 說明使用了where語句。如果 type為 all 或者 index ,一般會出現這樣的結果。這樣的問題,一般是查詢需要改進。
  • SQL優化實例

    • 分頁查詢
      第一種分頁寫法
    select * from twhere thread_id = 771025and deleted = 0order by gmt_create asc limit 0, 15;

    原理:
    一次性根據過濾條件取出所有字段進行排序返回。
    數據訪問開銷=索引IO + 索引全部記錄結果對應的表數據IO
    缺點:
    該種寫法越翻到后面執行效率越差,時間越長,尤其表數據量很大的時候。適用場景:當中間結果集很小(10000行以下)或者查詢條件復雜(指涉及多個不同查詢字段或者多表連接)時適用。

    第二種分頁寫法:

    select t.* from (select id from twhere thread_id = 771025 and deleted = 0 order by gmt_create asc limit 0, 15) a, t where a.id = t.id;

    前提:
    假設t表主鍵是id列,且有聯合索引secondary key:(thread_id, deleted, gmt_create)
    原理:
    先根據過濾條件利用聯合索引取出主鍵id進行排序,并內部的子查詢只掃描了id字段,而非全表,再進行join操作取出其他字段。
    數據訪問開銷=索引IO+索引分頁后結果對應的表數據IO
    優點:
    每次翻頁消耗的資源和時間都基本相同,就像翻第一頁一樣
    適用場景:
    當查詢和排序字段(即where子句和order by子句涉及的字段)有對應覆蓋索引時,且中間結果集很大的情況時適用

    • 批量SQL
      減少和數據庫交互次數
    INSERT ... ON DUPLICATE KEY UPDATEREPLACE INTOINSERT IGNOREINSERT INTO VALUES()
    • 對同一個表的多次alter操作必須合并為一次操作。
      mysql對表的修改絕大部分操作都需要鎖表并重建表,而鎖表則會對線上業務造成影響。為減少這種影響,必須把對表的多次alter操作合并為一次操作。例如,要給表t增加一個字段b,同時給已有的字段aa建立索引, 通常的做法分為兩步:
    alter table t add column b varchar(10);

    然后增加索引:

    alter table t add index idx_aa(aa);

    正確的做法是:

    alter table t add column b varchar(10),add index idx_aa(aa);

    總結
    數據庫是有狀態的服務,變更復雜而且速度慢,如果把業務邏輯放到數據庫中,將會限制業務的快速發展。建議把業務邏輯提前,放到前端或中間邏輯層,而把數據庫作為存儲層,實現邏輯與存儲的分離。

    總結

    以上是生活随笔為你收集整理的系统优化怎么做-SQL优化的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 对白刺激国产子与伦 | yjizz视频| 电影中文字幕 | 国产黄色视 | 免费大黄网站 | 欧美韩国日本 | 老牛影视少妇在线观看 | 青青草综合网 | 性色AV无码久久一区二区三 | 国产丝袜自拍 | 深夜福利院 | 性做爰视频免费播放大全 | 韩国伦理片在线播放 | 女人被狂躁60分钟视频 | 日本3p视频 | 欧美αv| www在线免费观看 | 国产精品一区二区不卡 | 欧美亚洲第一页 | 亚洲妇熟xx妇色黄蜜桃 | 一区二区不卡av | 国产精品777 | 久久合合 | 天天综合天天综合 | 一级片黄色的 | 中文字幕第31页 | 欧美精品久久久久久久久 | 亚洲成人av影片 | 亚洲老女人av | 美女隐私免费观看 | 国产精品91在线 | 欧美久久久一区二区三区 | 久久久高清 | 京香julia在线观看 | 国产理论片在线观看 | 亚洲精品一区中文字幕乱码 | 蜜桃视频在线观看www | 国产第3页 | 日本一区视频在线 | 青青视频二区 | 日本福利小视频 | 日韩午夜影院 | 中文字幕第66页 | 国产视频成人 | jizz成熟丰满日本少妇 | 4438x全国最大成人网 | 国产强伦人妻毛片 | 日日射视频 | 国产一卡二卡在线 | 国产精品三级av | 国产欧美123 | 丁香花电影免费播放在线观看 | 中文字幕在线观看播放 | 在线免费日韩av | 国产在线资源 | 国产精品视频一二三区 | 夜夜骑夜夜操 | 视频一区国产精品 | 午夜精品视频一区二区三区在线看 | www.日日操 | 国产成人在线视频播放 | 欧美日韩视频在线 | 欧美电影一区 | 18岁免费观看电视连续剧 | 钰慧的mv视频在线观看 | xx在线视频 | 欧美美女在线观看 | 亚洲熟女乱色综合亚洲av | 先锋影音av中文字幕 | 日韩黄色免费 | 国产精品卡一卡二 | 锦绣未央在线观看 | 男女插插视频 | 成年人免费av | 久久久久久久综合 | 亚洲乱熟女一区二区三区小说 | 五月婷婷七月丁香 | 精品无人区无码乱码毛片国产 | 西西4444www大胆无视频 | 97精品人妻一区二区三区在线 | www.黄色网| 俄罗斯av在线 | 日本成片网 | 校园sm主奴调教1v1罚视频 | 不卡三区 | 国产成人无码一区二区在线播放 | 日本美女毛茸茸 | 亚洲视频在线免费 | 麻豆影音 | 二区三区视频 | 91精品人妻一区二区三区 | 免费小视频在线观看 | 日日操夜夜 | 久久男人 | 高h校园不许穿内裤h调教 | 亚洲一级黄色大片 | 在线免费观看毛片 | 欧美另类自拍 | 国产精品3区 |