『壹』 mysql查詢千萬級別大表某一天的數據sql怎麼寫
查詢條件寫一天不就行么 跟是不是千萬級別的表有啥關系,卡的話加索引
『貳』 有單表千萬數據量,現在要分頁顯示,怎麼快速sql查詢
/*===============================================*/
/*Author:www.51pansou.com*/
/*==============================================*/
ALTERPROCEDURE[dbo].[Pg_Paging]
@Tablesvarchar(1000),--表名,多紅表是請使用tAainnerjointBbOna.AID=b.AID
@PKvarchar(100),--主鍵,可以帶表頭a.AID
@Sortvarchar(200)='',--排序欄位
@PageNumberint=1,--開始頁碼
@PageSizeint=10,--頁大小
@Fieldsvarchar(1000)='*',--讀取欄位
@Filtervarchar(1000)=NULL,--Where條件
@Groupvarchar(1000)=NULL,--分組
@isCountbit=0--1--是否獲得總記錄數
AS
--
--select*fromGL_NEWSorderbyGN_UPDATE_DATEDESC
--execPg_Paging@Tables='tb_NewsInfo',@PK='News_ID',@Sort='News_IDDESC',@PageNumber=2,@PageSize=15,@Fields='*',@Group='',@isCount=0
DECLARE@strFiltervarchar(2000)
declare@sqlvarchar(8000)
IF@FilterISNOTNULLAND@Filter!=''
BEGIN
SET@strFilter='WHERE'+@Filter+''
END
ELSE
BEGIN
SET@strFilter=''
END
if@isCount=1--只獲得記錄條數
begin
set@sql='SELECTCount(*)FROM'+@Tables+@strFilter
end
else
begin
if@Sort=''
set@Sort=@PK+'DESC'
IF@PageNumber<1
SET@PageNumber=1
if@PageNumber=1--第一頁提高性能
begin
set@sql='selecttop'+str(@PageSize)+''+@Fields+'from'+@Tables+''+@strFilter+'ORDERBY'+@Sort
end
else
begin
/**//*Executedynamicquery*/
DECLARE@START_IDvarchar(50)
DECLARE@END_IDvarchar(50)
SET@START_ID=convert(varchar(50),(@PageNumber-1)*@PageSize+1)
SET@END_ID=convert(varchar(50),@PageNumber*@PageSize)
set@sql='SELECT'+@Fields+'
FROM(SELECTROW_NUMBER()OVER(ORDERBY'+@Sort+')ASrownum,
'+@Fields+'
FROM'+@Tables+''+@strFilter+')ASD
WHERErownumBETWEEN'+@START_ID+'AND'+@END_ID+'ORDERBY'+@Sort
END
END
--print@sql
EXEC(@sql)
『叄』 如果用sql查詢10000條以上數據用什麼方法查詢
10000條,真的不算多.1千萬條的我都見過,那個查詢一般要跑2-3個小時.
直接用select就可以.如果嫌慢就加個索引.
『肆』 一條查詢千萬級數據的sql語句,正常查詢速度很快,根據其中四個列分組後查詢卻很慢,請問這是為什麼
根據其中四列分組後是需要進行全表掃描4次才能得到而正常查詢掃描一次就可以,所以很慢,可以建索引來實現分組,這樣會加快查詢的。
『伍』 SQL千萬級資料庫模糊查詢問題
%開頭的模糊查詢是沒有辦法使用索引的,怎麼優化都沒有用。
一個建議,就是分析欄位的含義,以及典型的查詢需求,把這個欄位拆分為多個獨立欄位,分別建立索引,這樣查詢才爽。例如你這個數據,看起來是『年月日時分秒』的格式,可以把這些信息分散到年、月、日這樣的欄位裡面,就可以模糊查詢所有年度的【月】或者類似的復雜組合——需要模糊的內容不寫在WHERE裡面即可。
『陸』 怎麼樣提高千萬級SQL資料庫查詢速度
1.對查詢進行優化,應盡量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引。
2.應盡量避免在 where 子句中對欄位進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃描,如:
select id from t where num is null
可以在num上設置默認值0,確保表中num列沒有null值,然後這樣查詢:
select id from t where num=0
3.應盡量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用索引而進行全表掃描。
4.應盡量避免在 where 子句中使用 or 來連接條件,否則將導致引擎放棄使用索引而進行全表掃描,如:
select id from t where num=10 or num=20
可以這樣查詢:
select id from t where num=10
union all
select id from t where num=20
5.in 和 not in 也要慎用,否則會導致全表掃描,如:
select id from t where num in(1,2,3)
對於連續的數值,能用 between 就不要用 in 了:
select id from t where num between 1 and 3
6.下面的查詢也將導致全表掃描:
select id from t where name like '%abc%'
若要提高效率,可以考慮全文檢索。