数据库方面:添加索引,分表或者分区,优化sql语句
程序方面:使用缓存,生成静态,优化php语句
服务器方面:增加服务器配置,或者增加服务器的数量
其他方面:图片独立出去,最好是做异步加载,压缩js,css文件
关于mysql处理百万级以上的数据时如何提高其查询速度的方法
最近一段时间由于工作需要,开始关注针对Mysql数据库的select查询语句的相关优化方法.
①.、应尽量避免在 where 子句中使用!=或操作符,否则将引擎放弃使用索引而进行全表扫描.
select id from t where num is null
可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:
select id from t where num=0
可以这样查询:
select id from t where num=10
union all
select id from t where name like '%c%'
若要提高效率,可以考虑全文检索.
对于连续的数值,能用 between 就不要用 in 了:
可以改为强制查询使用索引:
应改为:
select id from t where name like 'abc%'
①.0、不要在 where 子句中的"="左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引.
①.1、在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使 用,并且应尽可能的让字段顺序与索引顺序相一致.
这类代码不会返回任何结果集,但是会消耗系统资源的,应改成这样:
create table #t(...)
select num from a where num in(select num from b)
用下面的语句替换:
select num from a where exists(select 1 from b where num=a.num)
php使用的数据库一般是mysql,当数据量大于1000万时,为了效率最好还会进行分表存储.
这要看你应用在什么场合了,如果只是单纯的数据处理,不需要取出来使用的话,可以直接在数据库里操作,比如建十张表,根据特征把1000万条数据插入到不同的表里.如insert into table_1 select * from table.
如果要取出来使用的话,建议写执行脚本,在数据库空闲时(如零点之后)执行该脚本,将处理的结果保存在另外一张表里,再从这张表里获取想要的结果.
$mysqliObj = new mysqli("数据库服务器", "数据库用户","数据库表名", "数据库明");
//字符集
$result = $mysqliObj-query("select * from 表名 limit 1000");
$data=array();
while(@$row=$result-fetch_array()){
$data[]=$row;
}
优化查询,必要的索引是肯定需要的,还有就是可以考虑用临时表实现