mysql資料庫,表每天會插入30W條資料,該錶資料千萬級,查詢效率很慢,建立索引是否利大於弊

時間 2022-03-23 06:59:24

1樓:團隊讀書控

呵呵,我認為可以建立索引,但必須要合理分配io

為什麼:

1:索引是建立在表的一列或多個列上的輔助物件,目的是加快訪問表中的資料(加快查詢);

2:通常,通過索引查詢資料比全表掃瞄要快. 當oracle找出執行查詢和update語句的最佳路徑時, oracle優化器將使用索引.

除了那些long或long raw資料型別, 你可以索引幾乎所有的列. 在大型表中使用索引特別有效.

3:雖然使用索引能得到查詢效率的提高,但是我們也必須注意到它的代價. 索引需要空間來 儲存,也需要定期維護, 每當有記錄在表中增減或索引列被修改時, 索引本身也會被修改.

這意味著每條記錄的insert , delete , update將為此多付出4 , 5 次的磁碟i/o . 因為索引需要額外的儲存空間和處理,那些不必要的索引反而會使查詢反應時間變慢.

4:解決方案:

4.1利用分表操作。千萬級的資料必須要用垂直分表操作,這樣每天插入的資料在不同的表中,索引也就在不同的表的索引中,減少插入帶來的效率問題

4.2 索引表空間和資料表空間分開存放。不要把索引和表資料建立在乙個磁碟中,利用兩個磁碟,分別進行io操作,也就是索引表空間和資料表空間徹底分開。

提高系統io吞吐量。會有一定的效果,但不如第乙個的效果好

2樓:悠然看社會

如果經常查詢肯定要建索引的。索引會佔空間,硬碟夠大的話。擴大就是了。

sql資料庫乙個表存多少資料不會影響速度,我的程式資料量很大,每天都有大概30w條資料存入,不勝感激

3樓:

表的資料多少影響速度,是根據你的語句決定的,如表有100條記錄,語句是判斷欄位a>1,只要比較100次,表有100w條記錄,要判斷欄位a>1,需要比較100w次,會慢點,其實每天的資料量這麼大,只是用來存放還是用來做查詢使用的,一年前的資料或者更久之前的是否不用?如果不用可以分表存放的,一張表放的資料越多,肯定會越慢的。

4樓:知三四郎

如果一直insert,很少selelct,那不是什麼問題,你只要設計好索引,關心你的磁碟空間就可以了。

如果select也很多,就需要強化索引的使用,盡量降低每個sql的執行時間。

談到管理,建議你按照冷、熱資料,進行分表;也可以按月分表。

5樓:匿名使用者

每天30w條資料小case,

表的主鍵使用自增長列,這樣插入不會引起重排序,對插入速度無影響。

6樓:懺魂之詩

打完了才發現是2013年的,而且發布時發現編輯的內容很多都消失了,刪除還要50財富值。我tm

如何提高上百萬級記錄mysql資料庫查詢速度

7樓:愛可生雲資料庫

先安裝 apache spark,查詢資料庫的速度可以提公升10倍。

在已有的 mysql 伺服器之上使用 apache spark (無需將資料匯出到 spark 或者 hadoop 平台上),這樣至少可以提公升 10 倍的查詢效能。使用多個 mysql 伺服器(複製或者 percona xtradb cluster)可以讓我們在某些查詢上得到額外的效能提公升。你也可以使用 spark 的快取功能來快取整個 mysql 查詢結果表。

思路很簡單:spark 可以通過 jdbc 讀取 mysql 上的資料,也可以執行 sql 查詢,因此我們可以直接連線到 mysql 並執行查詢。那麼為什麼速度會快呢?

對一些需要執行很長時間的查詢(如報表或者bi),由於 spark 是乙個大規模並行系統,因此查詢會非常的快。mysql 只能為每乙個查詢分配乙個 cpu 核來處理,而 spark 可以使用所有集群節點的所有核。在下面的例子中,我們會在 spark 中執行 mysql 查詢,這個查詢速度比直接在 mysql 上執行速度要快 5 到 10 倍。

另外,spark 可以增加「集群」級別的並行機制,在使用 mysql 複製或者 percona xtradb cluster 的情況下,spark 可以把查詢變成一組更小的查詢(有點像使用了分割槽表時可以在每個分割槽都執行乙個查詢),然後在多個 percona xtradb cluster 節點的多個從伺服器上並行的執行這些小查詢。最後它會使用map/reduce 方式將每個節點返回的結果聚合在一起形成完整的結果。

mysql資料庫如何連線,MySql資料庫如何連線

web方式的mysql資料庫 如果沒理解錯的話應該是phpmyadmin吧?只是mysql的視覺化而已 php連線mysq方式沒變 使用php的資料庫操作函式連線mysql即可,可以用以下 測試是否能連線mysql link mysql connect localhost 主機 root 資料庫使用...

如何看mysql資料庫表的編碼格式

1.ascii 用途 用來對映簡單的單位元組字元,比如大小寫英文本母 阿拉伯數字 常用的標點符 運算子 控制字元等。編碼範圍 u 0000 u 007f 注意 對於用這類字元的場景夠用了,但是卻無法表達比如漢字,日文等編碼。2.unicode 用途 用來對映包含 ascii 以內的其他的所有字元。編...

mysql資料庫實現全站搜尋 3張表

為什麼不用三條sql分別搜尋呢,這樣搜出來的結果你知道是從哪個表出來的。如果你要用一條sql只能使用union了,類似這樣 select id,name from tablename1 where id 1union select id,title as name from tablename2 w...

php怎麼實現按id從my sql資料庫表中讀取一條內容

sql select from table order by id asc limit 1 this db query sql 說明 mysql中有order實現排序 asc從小到大 desc 從大到小 limit 1取排序後第一條.select name from 表 where id 1 php...

如何清理mysql資料庫快取資料

如果資料庫是安裝在你機器上的 那麼你可以暫時把mysql關閉 然後進入安裝目錄 找到data資料夾 這裡面就是放置資料庫檔案的。你會看到data裡面每乙個資料夾都對應你乙個資料庫名稱 把他們刪除就好了 就徹底沒了 不過可別把mysql這個資料夾刪了 還有別的檔案 比如.err別亂刪哦。如果這個你不會...