php3亿数据查询方案 php查询数据表( 十 )


3、压力测试: 测试能承受的最大并发数 以及测试最大承受的 QPS 值
4、常用的性能测试工具【ab,wrk,httpload,Web Bench,Siege,Apache JMeter】
四 优化
1、当 QPS 小于 50 时
优化方案:为一般小型网站,不用考虑优化
2、当 QPS 达到 100 时,遇到数据查询瓶颈
优化方案: 数据库缓存层,数据库的负载均衡
3、当 QPS 达到 800 时, 遇到带宽瓶颈
优化方案:CDN 加速,负载均衡
4、当 QPS 达到 1000 时
优化方案: 做 html 静态缓存
5、当 QPS 达到 2000 时
优化方案: 做业务分离,分布式存储
五、高并发解决方案案例:
1、流量优化
防盗链处理(去除恶意请求)
2、前端优化
(1) 减少 HTTP 请求[将 css,js 等合并]
(2) 添加异步请求(先不将所有数据都展示给用户,用户触发某个事件,才会异步请求数据)
(3) 启用浏览器缓存和文件压缩
(4) CDN 加速
(5) 建立独立的图片服务器(减少 I/O)
3、服务端优化
(1) 页面静态化
(2) 并发处理
(3) 队列处理
4、数据库优化
(1) 数据库缓存
(2) 分库分表,分区
(3) 读写分离
(4) 负载均衡
5、web 服务器优化
(1) nginx 反向代理实现负载均衡
(2) lvs 实现负载均衡
php+mysql 如何优化千万级数据模糊查询加快关于mysql处理百万级以上的数据时如何提高其查询速度的方法
最近一段时间由于工作需要 , 开始关注针对Mysql数据库的select查询语句的相关优化方法 。
由于在参与的实际项目中发现当mysql表的数据量达到百万级时,普通SQL查询效率呈直线下降,而且如果where中的查询条件较多时,其查询速度简直无法容忍 。曾经测试对一个包含400多万条记录(有索引)的表执行一条条件查询 , 其查询时间竟然高达40几秒,相信这么高的查询延时 , 任何用户都会抓狂 。因此如何提高sql语句查询效率,显得十分重要 。以下是网上流传比较广泛的30种SQL查询语句优化方法:
1、应尽量避免在 where 子句中使用!=或操作符,否则将引擎放弃使用索引而进行全表扫描 。
2、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引 。
3、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num is null
可以在num上设置默认值0 , 确保表中num列没有null值,然后这样查询:
select id from t where num=0
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、下面的查询也将导致全表扫描:(不能前置百分号)
select id from t where name like ‘%c%’
若要提高效率,可以考虑全文检索 。
6、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
7、如果在 where 子句中使用参数,也会导致全表扫描 。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择 。然 而,如果在编译时建立访问计划 , 变量的值还是未知的,因而无法作为索引选择的输入项 。如下面语句将进行全表扫描:

推荐阅读