性别列上真的不需要建索引吗

性别列上真的不需要建索引吗,我们假设有100w数据里只有10个女生,要找到这10个女生,看看有索引和没索引的差别。

建表

use test;
create table people(`id` int(11) auto_increment, `gender` char(1), primary key(`id`));

建一个用于填充数据的存储过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
delimiter // 

CREATE PROCEDURE filldata()
begin
declare v int default 0;

while v < 50000
do
insert into people(gender) values ('M');
set v = v + 1;
end while;

insert into people(gender) values ('F');

while v < 100000
do
insert into people(gender) values ('M');
set v = v + 1;
end while;

end
//

delimiter ;

填充数据,执行10次这个存储过程,大概每10w男生里有一个女生。

1
2
3
4
5
6
7
8
9
10
call filldata();
call filldata();
call filldata();
call filldata();
call filldata();
call filldata();
call filldata();
call filldata();
call filldata();
call filldata();

确认数据

1
2
3
4
5
6
7
mysql> select count(*) from people;
+----------+
| count(*) |
+----------+
| 1000010 |
+----------+
1 row in set (0.15 sec)

找出所有女生, 花费0.23秒

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mysql> select * from people where gender = 'F' limit 10;
+--------+--------+
| id | gender |
+--------+--------+
| 50001 | F |
| 150002 | F |
| 250003 | F |
| 350004 | F |
| 450005 | F |
| 550006 | F |
| 650007 | F |
| 750008 | F |
| 850009 | F |
| 950010 | F |
+--------+--------+
10 rows in set (0.23 sec)

在性别上建个索引再找出所有女生,花费0秒

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
mysql> create index idx_people_gender on people(gender);
Query OK, 0 rows affected (2.70 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> select * from people where gender = 'F' limit 10;
+--------+--------+
| id | gender |
+--------+--------+
| 50001 | F |
| 150002 | F |
| 250003 | F |
| 350004 | F |
| 450005 | F |
| 550006 | F |
| 650007 | F |
| 750008 | F |
| 850009 | F |
| 950010 | F |
+--------+--------+
10 rows in set (0.00 sec)

那这种情况下还是有索引查询快。

开启php-fpm status page

要监控PHP运行情况,打开php-fpm的status page可以提供很多有用的信息。

找到php-fpm的配置路径和master的pid

# ps -ef | grep "php-fpm: master"
root     31236     1  0 11:46 ?        00:00:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)  

修改php-fpm配置,打开status page

vi /usr/local/php/etc/php-fpm.conf
pm.status_path = /php_status

重启php-fpm

kill -USR2 31236

找到nginx配置路径

# ps -ef | grep "nginx: master"
root      3813     1  0 Mar09 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx

修改nginx配置,增加localhost的server节

server  
{
    listen       80;     
    server_name  localhost;
    error_log logs/localhost-error_log;
    access_log logs/localhost-access_log;

    location ~ ^/php_status$ 
    {       
        allow 127.0.0.1;
        deny all;

        include fastcgi_params;
        fastcgi_pass unix:/var/run/php5-fpm.socket; # 根据真实情况改动, 详见php-fpm配置
        fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
    }       

}

重启nginx

/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload

测试php-fpm状态页

# curl localhost/php_status           
pool:                 www
process manager:      static
start time:           17/Mar/2016:12:09:30 +0800
start since:          747
accepted conn:        4992
listen queue:         0
max listen queue:     0
listen queue len:     0
idle processes:       196
active processes:     4
total processes:      200
max active processes: 15
max children reached: 0
slow requests:        0

新的开始

在公司申请了新的笔记本,要重新初始化一套新的环境,这几年都习惯了Putty+Vim开发 ,
但新笔记本默认装了windows,所以得先把linux安装起来,虚拟机就用VirtualBox,
虚拟机管理用Vagrant,方便管理,打包的镜像也方便移植,下次重装系统还能接着用。

VirtualBox和Vagrant都从官网下载就可以了,一路next安装好,然后Vagrant的路径在 环境变量里设置一下,方便在cmd下调用。

然后下周Vagrant的镜像,以后可能要玩docker,所以在vagrantbox.es 上下载了一个CentOS 6.6 x64 (Minimal, VirtualBox Guest Additions

东西都下载好了,开搞

1
2
3
vagrant.exe box add base ..\download\centos-6.6-x86_64.box
vagrant.exe init base
vagrant up

你会发现,一直卡着,根本就启动不起来,打开VirtualBox看到虚拟机已经在运行了。 但确实vagrant up报错,用ssh也连不上。后来仔细在VirtualBox看了下, 只能装32bit的操作系统,想起来了,需要在BIOS里打开Intel的虚拟化。BIOS设置完重启后 在Virtualbox新建虚拟机选择操作系统时可以看到64bit操作系统了,这时候再vagrant up 就可以了,具体BIOS设置方式Google下有很多。

在cmd下打命令还是不习惯,因为习惯了linux终端下的各种命令,快捷键等,所以要下载了 一个cmder用,下载完整版的,已经自带ls, grep,git等命令,非常好用。具体设置和使用搜一下。

用惯了putty,又下载了个putty, 我一般设置如下参数

  1. window\appearance\font setting:consolas 12pt
  2. window\translate\charset:utf-8
  3. window\selection\action of mouse buttons:windows …
  4. window\line of scoreback:20000
  5. connection\auto-login username:root
  6. connection\seconds of keepalive:10

putty登录上去后,安装软件时很慢,发现默认就1G内存,1盒CPU,又把虚拟机配置成2核2G了。

1
2
3
4
config.vm.provider "virtualbox" do |v|
v.memory = 1024
v.cpus = 2
end

再有一个坑,就是Vagrant会默认映射一个目录/vagrant, 这个目录下执行chmod等是不起 作用的,因为它还在windows上,不支持linux文件权限。往里安装一个软件时,会有意想不到 的坑等着你,比如mysql的my.cnf配置就需要特殊的权限,否则mysql是启动不起来的。

登录centos后,发现yum等都不能用,因为公司上网需要代理,所以要设置yum,wget的代理

1
2
3
4
5
6
$ vi ~/.wgetrc
use_proxy=yes
http_proxy=proxy.xxx.com:8080

$ vi /etc/yum.conf
proxy=http://proxy.xxx.com:8080

最后就是在centos上把.vimrc简单配置下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
set nocp
set ts=4
set sw=4
set smarttab
set et
set nu
set ambiwidth=double
filetype plugin indent on


set encoding=UTF-8
set langmenu=zh_CN.UTF-8
language message zh_CN.UTF-8
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
set fileencoding=utf-8

好了,基本搞定开发环境了,可以愉快的在centos上玩耍了。

参考链接