php+mysql 如何优化千万级数据模糊查询加快查询速度提高用户体验?

jiewuzhe02 2013-03-26 02:59:42
最近有个项目市win2003 apache+php+mysql 的配置环境,由于项目是交通管理的,数据存储量很大,其中要个表少则几百万,时间一长就有好几千万的记录。

现在查询部分做优化,查询车号的like模糊查询对应时间段查询很慢,短时间段内数据量不要太多还可以,如果好几百万数据中差就非常慢啦。

不知各位大侠高手们有什么比较成熟项目成果可以分享,或者从服务器WEB环境、硬件设备、管理系统架构及数据库选择、表设计等方面给予合理的建议。

请各位多多发表个人建议,这里多谢啦。
...全文
5848 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
想你的我们 2014-10-09
  • 打赏
  • 举报
回复
针对你的like 建议 sphinx分布式+每日(根据需求调整频率)增量索引. 具体请百度.
  • 打赏
  • 举报
回复
楼主怎么实现的?
liujiesmart 2014-10-08
  • 打赏
  • 举报
回复
elasticsearch
码无边 2014-06-18
  • 打赏
  • 举报
回复
1.数据表:分表处理 2.搜索数据,sphinx+mysql
iamjianhua 2014-06-18
  • 打赏
  • 举报
回复
这个肯定需要根据具体的业务逻辑来设计的,优化有很多需要找到适合业务的方法
巴山虎 2014-06-18
  • 打赏
  • 举报
回复
用like肯定比=慢很多。建议采用精确查询。 要不可以使用Sphinx +mysql,基本上就木有问题了
lz547142884 2014-06-17
  • 打赏
  • 举报
回复
用缓存吧。,,,,
xuyanlu 2014-06-16
  • 打赏
  • 举报
回复
Mysql千万级的数据量还是很easy的吧,如果这点数据量都抗不住的话,那mysql也不可能这么火了 可以搭建Sphinx服务器,通过Sphinx查询
longzl123 2014-06-16
  • 打赏
  • 举报
回复
引用 4 楼 quzhongxiong 的回复:
[quote=引用 1 楼 aajunge 的回复:] 建议底层用c语言,mysql可能扛不住千万级的压力,到百万级都有点慢了。
呵,谁说MYSQL对于千万级就有压力了,百万级就有点慢了,百,千万的数据,在MYSQL中只要索引运用得当,还是相当OK的[/quote] 说的相当对 我的900w左右 照样ok 第一: http://blog.csdn.net/nevergiveuplzl/article/details/31376751 第二:优化分页查询语句 http://www.jb51.net/article/31868.htm (select id,title from collect where id>=(select id from collect order by id limit 90000,1) limit 10; ) 第三:建索引
张文君 2013-12-01
  • 打赏
  • 举报
回复
如果有均衡负载的服务器,可以利用分片查询,例如总共是1000W记录,那么可以分4部分检索,拼出查出的结果,程序可以像多线程一样的思想
bojimiyabojimiya 2013-09-13
  • 打赏
  • 举报
回复
读写分离加分表
码无边 2013-09-11
  • 打赏
  • 举报
回复
合理优化索引和表结构。
ahui_lcm 2013-09-10
  • 打赏
  • 举报
回复
使用http://www.coreseek.cn/
  • 打赏
  • 举报
回复
引用 14 楼 baoying34 的回复:
用Sphinx 全文检索啊
安装失败。。。
黄袍披身 2013-03-31
  • 打赏
  • 举报
回复
按照车牌的类型 划表 化整为零,当然咱们没看到你的整个部署 实在也说不上什么.... 很多 硬件瓶颈 软件瓶颈 代码...
quzhongxiong 2013-03-28
  • 打赏
  • 举报
回复
引用 12 楼 aajunge 的回复:
[quote=引用 4 楼 quzhongxiong 的回复:] [quote=引用 1 楼 aajunge 的回复:] 建议底层用c语言,mysql可能扛不住千万级的压力,到百万级都有点慢了。
呵,谁说MYSQL对于千万级就有压力了,百万级就有点慢了,百,千万的数据,在MYSQL中只要索引运用得当,还是相当OK的[/quote]确实索引运用的好的确会让读取的时候很快,但是千万级的数据库,在插入一条数据时势必要为这条数据添加索引,那时候的空间复杂度跟时间复杂度都会很大,但是我相信大神肯定会有办法解决,以前一直没解决这问题,还请大神指点一下[/quote] 其实可能我之前说的也有点片面化了,每个系统各自业务不同,对表所做的操作也是不同的,如果单是重点是查询,更新操作相对较少,那我相信千万数据没有什么问题,更新操作相对较多,在建索引时取一个平衡点,还是没有什么太大问题的,现在MYSQL优化方法很多,我说了也没什么意义,自己的经验就是不断的测试,使用不同的方法(主从,分表等等),或者说缓存,用数据来说话,看得出,这位朋友对这块也是有相关经验的,有机会可以多交流.
一只程序猿 2013-03-28
  • 打赏
  • 举报
回复
引用 4 楼 quzhongxiong 的回复:
[quote=引用 1 楼 aajunge 的回复:] 建议底层用c语言,mysql可能扛不住千万级的压力,到百万级都有点慢了。
呵,谁说MYSQL对于千万级就有压力了,百万级就有点慢了,百,千万的数据,在MYSQL中只要索引运用得当,还是相当OK的[/quote]确实索引运用的好的确会让读取的时候很快,但是千万级的数据库,在插入一条数据时势必要为这条数据添加索引,那时候的空间复杂度跟时间复杂度都会很大,但是我相信大神肯定会有办法解决,以前一直没解决这问题,还请大神指点一下
greenoldman 2013-03-28
  • 打赏
  • 举报
回复
那就按 牌照的号码规则分下表,简单实用。
jiewuzhe02 2013-03-28
  • 打赏
  • 举报
回复
引用 8 楼 guozhaoming 的回复:
我用的xunsearch
谢啦,但是这个事Unix系列系统的开源库,我们现在是多用win Server系列,还得测试程序,改部署环境等相关工作。
jiewuzhe02 2013-03-28
  • 打赏
  • 举报
回复
引用 7 楼 qizhao2001 的回复:
查车牌不是唯一吗, 怎么要用like。建好索引。 如果你是想玩 查 *123**, 这样的,那就用全文索引:如, 粤A12345, 在全文索引字段里写成 粤A A1 23 23 34 45 (连续的两个字符当成一个词,建全文索引) 当你要查询 车牌号包含 123 的时候, 就是查询 12 23 的 交集,再还要过滤下不是连续的(如12523 这样的车牌),
谢谢,查询数据时有模糊查询,原来做项目的都用的like,现在mysql数据库做的按月份分区表,车牌号,时间列做的索引。 但是查询上百万,时间段长的还是不理想。
加载更多回复(9)

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧