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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

关于数据库性能优化小经验

發布時間:2025/6/17 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于数据库性能优化小经验 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?最近做的公司的項目,主要負責和移動端交互后臺,有一個接口返回時間7 秒,一個20 秒;項目結構是springMVC 和hibernate ,hibernate覺得查詢多還可以,但是添加刪除更新多,又是 奪標關聯,映射,就很慢了;這是慢的一個小原因;

?現在說一個接口 ,answer 表? ,錄音表 ,會有很多錄音; 評論表 answer_comment,對錄音的評論,關聯字段 answer_id ; 一條錄音有多條評論,

第一個接口;查錄音answer表, 把 所有沒被評論的分頁查詢出來按時間排序, 實現是這樣, 把 所有的common的表 answer_id? 去拿出來,和answer表比較,

以前的sql : select * from answer a where a.id not in(select b.answer_id from answer b)? and a.....

沒有的查出來,如果數據量小,可以接受,現在線上 數據,錄音多,評論也多,這種時間負責度 為n? 的平方,就會特別慢,我用exists 替換了in ,不行,加了索引也不行,

解決辦法:answer表加個 字段是否已 被評論 flag ,先把 線上數據用sql更新? update answer a set a.isComment=1 where EXISTS(select 1 from? answer_comment b where b.answer_id=a.id);

?然后程序Java控制,如果有評論,就把那條錄音isComment 更新為1 ,這樣查詢 就是單表查詢,不會有關聯了 ,時間 復雜度為1 ;sql :select a from answer a where a.isComment=1;

第二個接口:返回高分錄音? 同樣是answer 表, answer_Comment , 用戶對錄音的點評 分為四個維度存在 answer_Comment ,高分錄音是4 個維度求和 大于3 的算高分;

之前的sql:select *? from answer a ?? group by a.id ? having a.id in (select? c. answer_id? avg(c.1+c.2+c.3+c.4) >3 from answer_Comment c? )??? and a.sum(secounds)>100? 這里也是求和 和in 執行時間很慢

大約20 秒了,當我接受這個項目的時候,添加索引 或者基本的sql優化也回力無天,這里又是 計算,又是in ;

解決 辦法,還是添加字段,但是這個 計算是實時 的,多了一條評論, 積分 就會改變 ,這里應為 才用了存儲過程,每天晚上去統計計算情況在answer表加一個字段 , 平均分, 更新后,類似于第一個接口 ;

?

=====================================================================================================================

?

其實sql 優化那些查詢,網上那些辦法,什么查詢結果需要的字段啊 ,加索引啊,都是空話,我覺得關鍵在于表的設計 ,盡量減少多表交互太多, 當然不是單表;

?

轉載于:https://www.cnblogs.com/zgghb/p/4655388.html

總結

以上是生活随笔為你收集整理的关于数据库性能优化小经验的全部內容,希望文章能夠幫你解決所遇到的問題。

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