mysql 千万级数据统计,怎么提高查询速度呀,怎么才能达到5秒内,用了索引也慢,现在非常急

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 千万级数据统计,怎么提高查询速度呀,怎么才能达到5秒内,用了索引也慢,现在非常急相关的知识,希望对你有一定的参考价值。

参考技术A 优化下mysql的参数
如果是linux下是修改my.cnf
innodb_buffer_pool_size
innodb_additional_mem_pool_size
innodb_log_buffer_size
这些都修改大些,如果前面有#就把#去掉追问

你做过类似的处理吗

追答

我做过删除方面的尝试,没修改之前600W的数据大概需要两个多小时···改了之后大概十来分钟,而且我是做的分批操作,反复提交还消耗了一部分时间

话说搜索这类的是不是myisam类型的表比innodb类型的要快来着

参考技术B 提高查询速度:
1.、编写sql语句时,如果你不是需要所有的列,尽量不要使用select * from,写上你需要查询的列。
2、编写sql时,尽量用where字句过滤掉一部分记录。
数据库中某个字段添加了索引后,索引的建立,维护和使用都是有数据库自己操作的,在SQL语句中不用关注。
追问

我就像你说的那样做的,我做的统计有1000w条数据吧例select count(id),level from certificate where status=0 and type=1 group by level 是不是count导致慢呀,在20s左右,这位大哥你做过分库分表吗

mysql 千万级数据库如何进行多张结构相同的表联合查询?如何优化或设置提高查询速度?

环境是win2003(linux) + mysql + php

1. 现有近亿条记录数据,分成N个表进行存储;当然这N个表结构都一样,如何才能提高这N表的联合查询?表都建了索引;

我在一个上百万的表上进行单表查询时间几乎为0,但几个同样的表进行联合查询,结果处于假死状态,请问有什么机制可以

提高这N个表的联合查询速度?

2.如何请提高其它表 结合 这N几个表进行查询?我觉得同结构表结合查询就很慢,再结合其它不同结构表 会更麻烦些,请高

手们支招!

为便于理解我建了一个表结构出来:
CREATE TABLE `test_bj` (
`id` int(10) NOT NULL,
`username` char(12) default NULL,
`userpwd` char(16) default NULL,
`sex` int(1) default NULL,
`Position` char(10) default NULL,
`Remarks` char(150) default NULL,
`addtime` timestamp NULL default NULL on update CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `s_id_atm` (`id`,`addtime`),
KEY `s_all` (`id`,`username`,`userpwd`,`sex`,`Position`,`Remarks`,`addtime`)
) ENGINE=MyISAM DEFAULT CHARSET=gb2312;

字段分别为:id , username , usrepwd , sex , position, remarks, addtime (字段可根据优化需要再建或修改)
表名:test_bj,test_sh .... test_gz... test_n (假设每张有1千万记录)
每个表名 很想以地区单独分开(不想建分区表),这样方便查看和单独查询

还说明一点
select id,username,sex,addtime from
(
select id,username,sex,addtime from test_bj where username like '%张%' and sex=1
union all
select id,username,sex,addtime from test_sh where username like '%张%' and sex=1
union all
...
select id,username,sex,addtime from test_gz where username like '%张%' and sex=1
) order by addtime desc limit0,20
这种多表联合查询基本处于死机状态 , 这查询代码该如何写?

朋友们以上问题给我支个招吧!大家一起总结下,对后来者都是一个帮助!在此拜谢了!
不要拷贝、复制,最好给出实例代码和配置步骤

首先要说的是创建索引会提高搜索速度
再就是 like 不会使用索引,结果就是你创建了索引但是找不到结果,这个和union没有关系
即使你单独一条查询也是遍历整个数据库,不会在索引中查询
对于这种情况一般都是通过分词创建文件索引的方式进行文字查询 如 lucene
现在的数据量,想要通过sql解决文字的like查询,通过数据库已经不够用的了~追问

多谢你的回答,我以上提的问题,Mysql有没有其它解决办法?表可多个,要联合查询,或者只能用分区表来做吗?还是像一个朋友说的 运用hash算法对同样结构的表进行计算分类后存入新表?

追答

不论你怎么分表 只要使用like 索引就不会起作用 最后的结果还是所有的数据都要遍历一遍
你可以看看 Mysql+sphinx 做的搜索,对于大数据量的查询使用比较多
单独使用数据库很难,我找过通过创建mysql分词索引的方式搜索数据,结果会丢失很多数据,结果也不准确,毕竟查询还是以准确为第一位的
你可以看看京东或者当当之类的,你输入了一个字他会自动匹配出结果数和数据量,这个就是分词索引的结果

参考技术A 我也遇到相同的问题,我的环境是MS SQL
greateast@qq.com

以上是关于mysql 千万级数据统计,怎么提高查询速度呀,怎么才能达到5秒内,用了索引也慢,现在非常急的主要内容,如果未能解决你的问题,请参考以下文章

php+mysql 如何优化千万级数据模糊查询加快

mysql为啥千万级别查询比1000条数据的查询慢

提高MYSQL千万级数据SQL查询优化经验

提高mysql千万级大数据SQL查询优化30条经验

如何提高mysql查询速度

提高mysql千万级大数据SQL查询优化30条经验(Mysql索引优化注意)