‘壹’ 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%'
若要提高效率,可以考虑全文检索。