1. 使用正则表达式
Selectname,email from t where email REGEXP “@163[.,]com$”
或者Select name,emailfrom t where email like “%163.com” or email like “%@163,com”
2. mysql有一个随机函数rand(),利用这个函数和orderby能够把数据随机排序
mysql>select * from stu order by rand();
mysql>select * from stu order by rand() limit 3;
3. 外键,是指一张表中的一个字段是另外一张表的主键,则叫外键
Innodb类型的表支持外键,myisam类型的表,虽然能创建成功,但不起作用
4. Show status 命令了解各种sql的执行频率
Mysql->show[session|global]status
其中:session(默认)表示当前连接,
Global表示自数据库启动至今
Connections 连接mysql的数量
Uptime服务器已经工作的秒数
Slow_queries 慢查询的次数
5. 定位执行效率较低的sql语句(解析sql语句)
Explain select *from table where id=1000;
Desc select * from table where id=1000;
6. 索引的存储分类
Myisam存储引擎的数据和索引是自动分开存储的,innodb存储引擎的表和索引是存储在同一表空间里,但可以有多个文件组成。
Mysql目前不支持函数索引,但是能对列的前面某一部分进行索引,例如name字段,可以只取name的前4个字符进行索引,这个特性可以大大缩小索引文件的大小,用户在设计表结构的时候也可以对文件列根据此特性进行灵活设计
Mysql>create index ind_company2_name oncompany2(name(4));
其中company表名 ind_company2_name索引名
1) 使用like的查询,后面如果是常量并且只有%号不在第一个字符,索引才可能会被使用
2) 如果对大的文本进行搜索,使用全文索引而不使用like”%...%”
3) 大范围的查询,mysql自身有时会放弃使用索引
4) Mysql中的where条件中假如有or,则两列都得使用索引,如果只有一列使用索引,则mysql都不会使用索引
5) Handler_read_rnd_next d的值高则意味着查询运行低效,并且应该建立索引补救
6) 尽量避免使用嵌套查询,因为里面能用到索引,外面不能用到索引,可以用连表查询来替代
7. Mysql服务器优化
Myisam读锁 lock table t1 read 能读,但不能写
Myisam 写锁lock table t1 write自己能读写,别人不能读写
Mysql重启
Pkill mysqld
Pstree | grep mysqld
/usr/local/mysql/bin/mysqld_safe –user=mysql &
!ps
Mysql密码丢失解决
Service mysqld stop
Mysqld_safe –skip-grant-tables –user=mysql &
//跳过授权标mysql.user和mysql.db这些表
Mysql –uroot
Set password=password(“123456”);
//用这一条语句结果报错,就是因为加了—skio-grant-tables
Mysql>update user set password=password(“123456”) whereuser = ‘root’ and host=’localhost’;
Mysql>set password for root@localhost=password(“123456”);
Mysql>set password=password(“123456”);