JS陣列關聯查詢的效能優化

2021-09-13 11:15:11 字數 1347 閱讀 1402

傳統2個陣列的巢狀查詢一般通過兩個迴圈體巢狀實現,時間複雜度為:n^2;

而通過建立索引物件的形式的時間複雜度為:n;這種犧牲記憶體來達到複雜度降冪的的方法能提高多少效能呢?

下面是以陣列1長度為10000;陣列2為50000的亂序陣列進行測試的測試結果。(測試結果的單位都是ms)

firefox測試結果: 平均快48倍

// 第一次

傳統的巢狀迴圈:1479

建立索引:30

// 第二次

傳統的巢狀迴圈:1852

建立索引:36

// 第三次

傳統的巢狀迴圈:1754

建立索引:38

chrome測試結果: 平均快64倍

// 第一次

傳統的巢狀迴圈:1800

建立索引:26

// 第二次

傳統的巢狀迴圈:1297

建立索引:35

// 第三次

傳統的巢狀迴圈:2522

建立索引:27

ie11測試結果:平均快11倍

// 第一次

傳統的巢狀迴圈:110431

建立索引:616

// 第二次

傳統的巢狀迴圈:7172

建立索引:689

// 第三次

傳統的巢狀迴圈:7310

建立索引:686

完整的**(實際使用中請考慮資料型別校驗和是否為空判斷)

// 情景:從陣列arr1的id拿到陣列arr2中的所有記錄,統計急了num的總和寫回到arr1中

// 模擬2個陣列

var start = 1000000

// 定義模擬2個陣列的方法;count: arr1的長度值;n: 為arr2為arr1的長度的多少倍

function getarr(count, n)

for(var i = 0; i核心**:

// 使用降冪演算法

// arr2進行分組,建立以id值為key的物件

function getarrgroup(arr, id)

var len = arr.length

var index

for(var i = 0; i < len; i++) else

} return o

}// 給arr1項的count賦值

function setarrcount(arr, o, id, fn)

console.log(arr)

return arr

}

MySQL優化之關聯查詢優化

前言 sql語句優化是很重的乙個事情。所以要去做。正文一 left join 先寫乙個sql語句看看怎麼效能如何 這樣的情況怎麼去優化呢?肯定是使用到的查詢欄位去建索引。哪就先給idx card表的card欄位加上索引看看有沒有效果。執行 alter 建完索引後再接著執行咱們的查詢語句看看怎麼樣了。...

MySQL關聯查詢優化例項

專案中發現有乙個查詢響應非常慢,花時間分析以及優化,特地記錄。1 背景 專案採用mysql資料庫,操作使用ibatis 2 查詢說明 這個查詢是每次查詢一定數目的使用者資訊,查詢中涉及到多表關聯,具體查詢sql如下 select s.name as name,s.image as image,s.i...

MySQL關聯查詢優化例項

專案中發現有乙個查詢響應非常慢,花時間分析以及優化,特地記錄。1 背景 專案採用mysql資料庫,操作使用ibatis 2 查詢說明 這個查詢是每次查詢一定數目的使用者資訊,查詢中涉及到多表關聯,具體查詢sql如下 select s.name as name,s.image as image,s.i...