mysql数据库之索引优化

如何选择合适的列建立索引?

  1. 在where从句、group by从句、order by从句、on从句中出现的列
  2. 索引字段越小越好
  3. 离散度大的列放到联合索引的前面

理解离散度

1
SELECT * FROM payment where staff_id = 2 AND customer_id = 584;

是index(staff_id, customer_id)好还是index(customer_id, staff_id)好?

备注:比较staff_id和customer_id两者的离散度,那个离散度高,那个列就放置到联合索引的前面

Read More

laravel初体验

访问流程

路由文件routes.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/*默认是以匿名函数的方式进行路由,/是当前域名下加载视图文件welcome.blade.php */

Route::get('/', function () {
return view('welcome');
});
Route::get('/about', function () {
return view('about');
});
Route::get('/blog', function () {
return view('blog.content'); //其中的“.”可以用“/”代替
});

//如果使用非匿名函数的方式

Route::get('/', 'UserController@index');
Route::get('/about', 'UserController@about');
Route::get('/blog', 'UserController@blog');

创建控制器

  1. 可以手动创建Controller,也可以使用命令行创建控制器php artisan工具
  2. 参数 –plain使用则不会生成一些默认的方法如index,create等
1
2
php artisan make:controller UserController
php artisan make:controller TestController --plain

视图的加载

加载视图的方法

1
2
3
return view('welcome');
return view('blog/title');
return view('blog.content');

怎么向blade视图传递变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$name = '<p style="color:red">upfriend</p>';
$time = date('Y-m-d', time());
$arr = array('first' => 'jerry', 'last' => 'bool');

//传递变量-通用方式传递给$data数组
$data['name'] = $name;
$data['time'] = $time;
return view('blog.content', $data);

//Laravel链式操作方式
return view('blog.content')->('name' => $name); //传递一个变量
return view('blog.content')->with(array('name' => $name, 'time' => $time)); //传递数组变量

//compact方法
return view('blog.content', compact('name', 'time', 'arr')); //去掉$的变量名

如何正确输出变量的值

1
2
3
4
5
6
7
//原生PHP输出数据方式,默认会对变量中的字符会进行转义(xss?)
<h1><?=name?></h1>

//Laravel的blade模板引擎渲染方式,两个大括号{{}}表示转义后输出
<h1>{{name}}</h1> //浏览器输出<p style="color:red">upfriend</p>

<h1>{!!name!!}</h1> //会见变量作为html,输出红色字体的upfriend

mysql之sql优化-慢查询日志开启和查看(1)

如何发现有问题的SQL?使用慢查询日志【slow_query_log】对有效率问题的sql进行监控

查看慢查询日志开启状态

1
show variable  s like 'slow_query_log'

记录未使用索引的查询

未使用索引的查询默认是关闭的,如下

1
show variables like 'log_queries_not_using_indexes';


需要打开未使用索引的查询,即未使用索引的查询会记录在案

1
set global log_queries_not_using_indexes=on

Read More

tmux linux下的终端复用工具

tmux常用命令

tmux打开tmux服务,列出几个最常用的命令
①:ctrl+B ②:字符
如:

1
2
3
4
5
6
7
8
9
ctrl+B % 纵向切屏,将屏幕切成左右两半

ctrl+B " 单个双引号,水平切割屏幕上下两半

ctrl+B x 确定关掉当前面板(回话)吗? 'y' ->删除当前会话

ctrl+B t 显示当前时间

ctrl+B ↑ ↓ → ← 会话之间跳转

更多命令参考
[http://kumu-linux.github.io/blog/2013/08/06/tmux/][1]
[1]: http://kumu-linux.github.io/blog/2013/08/06/tmux/

hexo+github搭建blog

hexo是一个快速、简介且高效的博客框架!

安装前置服务

hexo依赖nodejs和git

  • 由于依赖nodejs,因此安装hexo之前需要先安装nodejs
  • 使用github搭建静态博客,因此需要安装git客户端(使用hexo命令编译并上传至github)

[百度云盘下载链接][1]
[1]: http://pan.baidu.com/s/1dENChzF

快速创建博客页面

hexo server

1
2
3
4
//启动本地服务,查看博客主页
$ hexo server
INFO Start processing
INFO Hexo is running at http://localhost:4000/. Press Ctrl+C to stop.

hexo new “my new post”

1
2
3
//创建文章页
$ hexo new "hexo guidebook"
INFO Created: g:\hexo\source\_posts\hexo-guidebook.md

hexo new page “categories”

创建单页面,比如分类,关于

hexo g (hexo generate)

生成静态页面

hexo deploy (上传至github)

如果没有建立github与本地git的关联,会报错,因为本地和github没有建立信任机制是不能随意上传至github的

补充:如何建立信任机制

生成新的Key:

1
ssh-keygen -t rsa -C "your_email@youremail.com"  //(引号内的内容替换为你自己的邮箱)
  • 输出显示

Generating public/private rsa key pair. Enter file in which to save the key (/Users/your_user_directory/.ssh/id_rsa):

  • 直接回车,不要修改默认路劲。
1
2
Enter passphrase (empty for no passphrase): 
Enter same passphrase again:
  • 设置一个密码短语,在每次远程操作之前会要求输入密码短语!闲麻烦可以直接回车,不设置。成功:

Your identification has been saved in /Users/your_user_directory/.ssh/id_rsa. Your public key has been saved in /Users/your_user_directory/.ssh/id_rsa.pub. The key fingerprint is: … …

提交公钥:

  • 找到.ssh文件夹,用文本编辑器打开“id_rsa.pub”文件,复制内容到剪贴板。

  • 打开 https://github.com/settings/ssh ,点击 Add SSH Key 按钮,粘贴进去保存即可。

踩到的坑

hexo deploy后报一堆错误如下,在初次使用git命令也许会遇到

1
warning: LF will be replaced by CRLF in .....

有效解决方法:

  1. 在git bash 输入下面的命令:

    1
    git config --global core.autocrlf  false
  2. 删掉项目中的.git文件夹 rm -rf .git

  3. 重新
    git init
    hexo deploy
    问题解决!

参考【其他一些主题配置文章】
http://jianghao.wang/2015/hexo-github/
http://zhiho.github.io/2015/09/29/hexo-next/

mysql添加用户管理员及授权

mysql添加用户管理员及授权

比如添加test用户,grant 高级 DBA 管理 MySQL 中所有数据库的权限

step1 创建用户

1
2
3
4
insert into mysql.user(Host,User,Password) values("%","test",password("123qwe"));
insert into mysql.user(Host,User,Password) values("localhost","test",password("123qwe"));
注:%和localhost的区别
此处的"localhost",是指该用户只能在本地登录,不能在另外一台机器上远程登录。如果想远程登录的话,将"localhost"改为"%",表示在任何一台电脑上都可以登录。也可以指定某台机器可以远程登录。

step2 为用户授权

1
2
3
授权格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码"; 
grant all privileges on testDB.testTable to test@localhost identified by '1234';
grant all on *.* to test@'%'; //全部数据库表的权限

step3 刷新系统权限表

1
flush privileges; //刷新系统权限表

一个脚本引发的思考

问题来源:

前段时间写了一个crontab脚本,每5分钟连接一次数据库,遍历库中待处理的任务,一旦发现待处理(status=0)的任务,则将该任务状态置为处理中(status=1),然后开始执行这个任务(dealing process),执行完成status=2

最初我是一次性将所有任务设为处理中,然后一个一个串行处理,这样效率极低,一个任务可能要1个小时,其他的只能排队等。

Read More

Linux常用命令-awk

详细的awk使用总结翻阅为知笔记

awk

awk中 !a[$0]++ 与 !a[$1…]++
功能:

去重

  1. a[$0]是未定义的,即undef
  2. !优先级高于++

1.!a[$0]++
!a[$0]++可以去除一行中重复的记录,以记录作为数组(可以将a理解为数组)索引;基于上面两点说明,这个不难理解。例子如下
请输入图片描述

从上面例子可以看出,重复的记录被删除掉,只保留重复记录中第一次出现的记录

2.!a[$1]++ 或者 !a[$2]++等等
!a[$1]++可以根据记录中某个域删除这个域相同的记录,也可以根据这个域相同,执行另外一些相应的操作。例子如下;
请输入图片描述

从上面例子可以看出,第二个域相同的多条记录被删除,只保留重复记录中第一次出现的记录

查看文件夹下的文件个数(当前目录的文件和子文件夹的文件数)

find ./ -type f | wc -l

wc

功能:

统计指定文本文件的行数、字数、字符数

用法:

  1. wc file
  2. wc -l file
  3. wc -w file
  4. wc -c file

文章部分来源:http://blog.163.com/njut_wangjian/blog/static/16579642520141027103125556/

linux常用命令(总是forget)

linux操作历史查询

  • 我们知道上下键可以选择出输入的history历史;
  • 如果输入命令很多,只记得命令的部分字符,可以使用ctrl+R,然后模糊匹配,输入部分字符串,就可以定位命令

linux 删除已输入的命令(常用)

ctr + w 往回删除一个单词,光标放在最末尾
ctl + u 删除光标以前的字符
ctl + k 删除光标以后的字符
ctl + a 移动光标至的字符头
ctl + e 移动光标至的字符尾
ctl + l 清屏

常用的bash命令快捷建

ctrl键组合
ctrl+a:光标移到行首。
ctrl+b:光标左移一个字母
ctrl+c:杀死当前进程。
ctrl+d:退出当前 Shell。
ctrl+e:光标移到行尾。
ctrl+h:删除光标前一个字符,同 backspace 键相同。
ctrl+k:清除光标后至行尾的内容。
ctrl+l:清屏,相当于clear。
ctrl+r:搜索之前打过的命令。会有一个提示,根据你输入的关键字进行搜索bash的history
ctrl+u: 清除光标前至行首间的所有内容。
ctrl+w: 移除光标前的一个单词
ctrl+t: 交换光标位置前的两个字符
ctrl+y: 粘贴或者恢复上次的删除
ctrl+d: 删除光标所在字母;注意和backspace以及ctrl+h的区别,这2个是删除光标前的字符
ctrl+f: 光标右移
ctrl+z : 把当前进程转到后台运行,使用’ fg ‘命令恢复。比如top -d1 然后ctrl+z ,到后台,然后fg,重新恢复
esc组合
esc+d: 删除光标后的一个词
esc+f: 往右跳一个词
esc+b: 往左跳一个词
esc+t: 交换光标位置前的两个单词。