mysql索引降维
温馨提示:
本文最后更新于 2018年03月31日,已超过 2,492 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
很多人都知道,mysql有索引这个概念,但是却很少去较真,如何利用索引去对数据降维,以提高查询速度。
举个常见的场景,那就是用户日志(订单),例如,在一家以电话推销为主的大型公司,有1000个员工,每天都得打出300个营销电话。我们做出以下数据特征模拟.
一个月内,有1000个员工号码,每人在8点-18点打出300个营销电话,打一个月
数据表sql:
CREATE TABLE \`dm_test\` (
\`id\` int(11) NOT NULL AUTO_INCREMENT,
\`phone\` varchar(13) DEFAULT NULL,
\`to_phone\` varchar(13) DEFAULT NULL,
\`add_time\` datetime DEFAULT NULL,
PRIMARY KEY (\`id\`),
KEY \`phone\` (\`phone\`),
KEY \`add_time\` (\`add_time\`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
tp模拟生成数据代码:
public function test(){
ignore_user_abort(true);
set_time_limit(0);
$add_arr = array();
$b=0;
for ($i=0;$i < 1000; $i++){
$phone = '155'.mt_rand(10000000,99999999);//随机生成手机号
$arr = array();
$arr['phone'] = $phone;
for($j=0;$j<30;$j++){//循环生成30天的数据
$addtime = mt_rand(strtotime(date('Y-m-'.($j+1)))+8\*3600,strtotime(date('Y-m-'.($j+1)))+18\*3600);//随机8点-18点
for($k=0;$k<300;$k++){
$arr['to_phone'] = '155'.mt_rand(10000000,99999999);//随机生成手机号
$arr['add_time'] = date('Y-m-d H:i:s',$addtime);//随机8点-18点
$add_arr[] = $arr;
$b++;
}
ob_flush();//刷新PHP自身缓冲区
flush();//刷新(特指apache)web服务器的缓冲区,输出数据
}
if($i%2==0){
$result = M('test')->addAll($add_arr);//批量新增
echo '完成'.$i.'<br>';//输出状态
$add_arr=array();
}
}
echo $b;
}
这样,我们就有了一个存有9000万数据的数据表//生成时间有点慢
假设,我们要查询15585854115在2018-03-10至2018-03-29的记录,sql如下:
正文到此结束
- 本文标签: 数据库
- 本文链接: https://www.php20.cn/article/123
- 版权声明: 本文由仙士可原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权