2017-09-07 54 views
0

我正在做一些網絡抓取並將結果插入到數據庫中。刮花需要2秒左右,但插入需要更長的時間。有兩個表,第一個表是urls和Ids列表,第二個表是一組tagIds和siteIds。如何加快SQL表的速度並快速插入並選擇?

當我向siteIds添加索引(這是URL的md5哈希值時,我這樣做是因爲它可以加快插入速度,因爲它不必爲每個urls id查詢數據庫來添加站點標籤對)插入速度在300,000左右頁面之後掉落懸崖。


表1

hash      |url    |title |description 
sjkjsajwoi20doi2jdo2xq2klm www.somesite.com somesite a site with info 

表2

site      |tag 
sjkjsajwoi20doi2jdo2xq2klm xn\zmcbmmndkd2 

當我脫下它去更快的索引和我能夠在12小時內新增約25萬條記錄,但搜索沒有索引的標籤是不可能的。

我使用PHP和mysqli爲此,我願意提供更好的方式來組織這些數據。

+0

如果您沒有正確使用索引,合適的索引表的選擇速度會更快。 – Qirel

回答

0

嗯,這有點棘手,因爲緩慢是由於數據庫需要更新每個記錄插入時索引數據結構的開銷。

你是如何訪問它的?使用PDO的PHP?使用原始的SQL?準備好的陳述?

我還會確保您是否需要事務處理,因爲數據庫可能會隱式地使用事務處理,這可能會降低插入速度。對於原子記錄(記錄未被刪除但收集,或沒有標準化的外鍵相關記錄),你不需要這個。

你也可以考慮測試STORED PROCEDURE是否有更好的效率(如果數據庫有存儲過程,db可能會進行優化)。然後通過PDO調用這個存儲過程。數據庫的服務器/安裝也有可能存在硬件限制,無論是存儲(不是在SSD上)還是數據庫操作/安裝都無法訪問cpu的全部功能(OS中的低優先級,其他大型處理數據庫等待CPU週期等)。