1. 程式人生 > >如何解決百萬級資料查詢優化

如何解決百萬級資料查詢優化

一、SQL優化——使用索引查詢

  • 造成全表查詢的(索引失效的情況):避免null值查詢。索引列的資料不要大量重複。where語句中or(union替代)、in not in(between and)、like、!=和<>符號的使用。where子查詢中使用引數引入(  select id from t where [email protected] 可以改為強制查詢使用索引: select id from t with(index(索引名)) where [email protected])、 where 子句中對欄位進行表示式操作(select * from user where id/2 =100 強制改為select * from user where id =100*2)、where字句中對欄位進行函式操作的、在where字句等號左面使用函式、算數運算及其他運算。
  • 索引勿濫用:在where及order by涉及的列上建索引。索引並不是越多越好
  • 資料量的優化:儘量使用數字型欄位(字元增加儲存開銷)、儘可能的使用vachar/nvarchar代替char/nchar(節省儲存空間),避免臨時表過多的建立和刪除,儘量使用表變數來代替臨時表、儘量避免大資料量的返回、遊標操作資料超過1萬行不好等
  • java方面:儘量少早物件、大資料和小資料的操作分開、使用jdbc操作資料庫、控制好記憶體,讓資料流動,而不是全部在記憶體、做好快取。
  • 分割槽表的建立

二、資料庫優化

  • 硬體調整效能:最有可能影響效能的是磁碟和網路吞吐量,解決辦法擴大虛擬記憶體,並保證有足夠可以擴充的空間;把資料庫伺服器上的不必要服務關閉掉;把資料庫伺服器和主域伺服器分開;把SQL資料庫伺服器的吞吐量調為最大;在具有一個以上處理器的機器上執行SQL。
  • 使用儲存過程:應用程式的實現過程中,能夠採用儲存過程實現的對資料庫的操作儘量通過儲存過程來實現,因為儲存過程是存放在資料庫伺服器上的一次性被設計、編碼、測試,並被再次使用,需要執行該任務的應用可以簡單地執行儲存過程,並且只返回結果集或者數值,這樣不僅可以使程式模組化,同時提高響應速度,減少網路流量,並且通過輸入引數接受輸入,使得在應用中完成邏輯的一致性實現。
  • 應用程式結構和演算法:建立查詢條件索引僅僅是提高速度的前提條件,響應速度的提高還依賴於對索引的使用。因為人們在使用SQL時往往會陷入一個誤區,即太關注於所得的結果是否正確,特別是對資料量不是特別大的資料庫操作時,是否建立索引和使用索引的好壞對程式的響應速度並不大,因此程式設計師在書寫程式時就忽略了不同的實現方法之間可能存在的效能差異,這種效能差異在資料量特別大時或者大型的或是複雜的資料庫環境中(如聯機事務處理OLTP或決策支援系統DSS)中表現得尤為明顯。在工作實踐中發現,不良的SQL往往來自於不恰當的索引設計、不充份的連線條件和不可優化的where子句。在對它們進行適當的優化後,其執行速度有了明顯地提高!

相關推薦

如何解決百萬資料查詢優化

一、SQL優化——使用索引查詢 造成全表查詢的(索引失效的情況):避免null值查詢。索引列的資料不要大量重複。where語句中or(union替代)、in not in(between and)

MySQL百萬資料庫查詢優化技巧

1.對查詢進行優化,應儘量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引。 2.應儘量避免在 where 子句中對欄位進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃描,如: select id from t where nu

oracle千萬資料查詢優化

需求:組合查詢,按條件統計某幾個欄位取前100條記錄 問題:沒建索引導致查詢結果耗時5秒多,不能忍受。 解決方法: 建索引,在哪個欄位建?        在這裡先提下Oracle的sql語句的執行。oracle在執行sql語句之前會用優化器Optimizer對sql語句進行

MySql查詢優化 百萬記錄查詢優化 limit分頁查詢

效率分析關鍵詞:explain + SQL語句 一,最常見MYSQL最基本的分頁方式limit: select * from `table` order by id desc limit 0, 20在中小資料量的情況下,這樣的SQL足夠用了,唯一需要注意的問題就是確保使用

使用ElasticSearch完成百萬資料查詢附近的人功能

上一篇文章介紹了ElasticSearch使用Repository和ElasticSearchTemplate完成構建複雜查詢條件,簡單介紹了ElasticSearch使用地理位置的功能。這一篇我們來看一下使用ElasticSearch完成大資料量查詢附近的人功能,搜尋N米範

Mysql面試題及千萬資料查詢優化

今天在說Mysql查詢優化之前,我先說一個常見的面試題,並帶著問題深入探討研究。這樣會讓大家有更深入的理解。 一,Mysql資料庫中一個表裡有一千多萬條資料,怎麼快速的查出第900萬條後的100條資料? 怎麼查,誰能告訴我答案?有沒有人想著,不就一條語句搞定嘛 select * from table limi

百萬資料導致查詢緩慢的問題解決方式-給SQL 新增索引

本文參考自: https://www.cnblogs.com/tianhuilove/archive/2011/09/05/2167795.html https://www.cnblogs.com/replace/archive/2006/04/10/371067.html –原查詢語句

SQL Server 百萬資料提高查詢速度的方法

1.應儘量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用索引而進行全表掃描。 2.對查詢進行優化,應儘量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引。 3.應儘量避免在 where 子句中對欄位進行 null 值判斷,否則將導致引擎

解決mongod百萬資料去重

mongodb的表結構如下 注:圖上看的眼花繚亂,這個是模擬生成環境下的資料,我不得不做了一些處理。 假定:圖中表格資料操作100萬條,以name和introduction為依據,對資料進行去重。 首先想到的是distinct,但這個是兩個欄位,不好處理。還有

如何優化Mysql千萬快速分頁,limit優化快速分頁,MySQL處理千萬資料查詢優化方案!(zz)

MySQL資料庫優化處理實現千萬級快速分頁分析,來看下吧。 資料表 collect ( id, title ,info ,vtype) 就這4個欄位,其中 title 用定長,info 用text, id 是逐漸,vtype是tinyint,vtype是索引。這是一個基本的新聞系統的簡單模型。現在往裡面填

教你幾招,快速建立 MySQL 五百萬資料,愉快的學習各種優化技巧

> 我是風箏,公眾號「古時的風箏」,一個兼具深度與廣度的程式設計師鼓勵師,一個本打算寫詩卻寫起了程式碼的田園碼農! 文章會收錄在 [JavaNewBee](https://github.com/huzhicheng/JavaNewBee) 中,更有 Java 後端知識圖譜,從小白到大牛要走的路都在裡面。 如

SQL SERVER 數據庫中幾百萬數據查詢優化

文件組 添加 篩選 數據查詢 需要 增長 basic 百萬 cms 1、當需要查詢表中所有數據時 比較以下三種查詢語句: 假設數據表為BasicMsg20170401,共有17列,數據條數為兩百八十四萬 (1)SELECT * FROM BasicMsg20170401

百萬級數據查詢優化(數據庫)

sel log 更新 重復 sts 頻繁 行處理 eat 並且 1.對查詢進行優化,應盡量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引。 2.應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行

公司百萬級數據查詢優化方案

cut batch 邏輯 num gpo 百萬 status bat rom 優化邏輯:處理大數據量的,每次查詢2000條數據,等數據用完後executeBatch更新所有要更新的數據。 1、查詢數據,我們只查詢一部分數據。 sql: -----百萬級數據優化查詢selec

資料庫SQL優化大總結之 百萬資料庫面試優化方案

網上關於SQL優化的教程很多,但是比較雜亂。近日有空整理了一下,寫出來跟大家分享一下,其中有錯誤和不足的地方,還請大家糾正補充。 這篇文章我花費了大量的時間查詢資料、修改、排版,希望大家閱讀之後,感覺好的話推薦給更多的人,讓更多的人看到、糾正以及補充。   一、百萬級資料庫優化

php - 從資料庫匯出百萬資料(CSV檔案)

將資料庫連線資訊、查詢條件、標題資訊替換為真實資料即可使用。 <?php set_time_limit(0); ini_set('memory_limit', '128M'); $fileName = date('YmdHis', time()); header('Content-

sqlserver百萬資料高效能分頁

批量插入100萬條資料 用於測試 原文地址:https://www.cnblogs.com/celine/p/9101871.html /*建立表*/ create table tb( km_h int, zkzh int, ss_h int, zw_h int ) //科目號|考生編號

百萬資料下的mysql深度解析

1.兩種查詢引擎查詢速度(myIsam 引擎 ) InnoDB 中不儲存表的具體行數,也就是說,執行select count(*) from table時,InnoDB要掃描一遍整個表來計算有多少行。 MyISAM只要簡單的讀出儲存好的行數即可。 注意的是,當count

poi實現百萬資料匯出

直接上程式碼,注意使用 SXSSFWorkbook 此類在構造表格和處理行高的時候效率極高,剛開始時我使用的 XSSFWorkbook 就出現構造表格效率極低,一萬行基本需要3秒左右,那當匯出百萬級資料就慢的要死啦,而且他會讓記憶體溢位 1.  Commen

POI匯出時寫一份到ftp伺服器,一份下載給客戶端 ftp伺服器搭建(離線安裝vsftpd),配置 poi實現百萬資料匯出 oi實現百萬資料匯出

導語:   昨天接到專案經理這麼一個需求,讓我在POI匯出Excel的時候寫一份到我之前搭建的ftp伺服器上。所以就有了這篇部落格首先我們來分析下之前的業務邏輯:我們建立並構造了一個workbook,然後構建了一個OutputStream輸出流,然後我們把資料寫入輸出流中就可以被客戶端下載。   現在我們