sql学习笔记(18)-----------数据库创建过程(八)
nd_sales2_companyid_moneys?
key: ind_sales2_companyid_moneys?
key_len: 5?
ref: count?
rows: 1?
Extra: Using where?
1 row inset (0.00 sec)?
*************************** 2. row ***************************?
id: 2?
select_type: SIMPLE?
table: company2?
type: index_subquery?
possible_keys: ind_company2_id?
key: ind_company2_id?
key_len: 5?
ref: func?
rows: 1?
Extra:?
1 row inset (0.00 sec)
从执行计划中可以明显看出查询扫描的记录范围和使用索引的情况都有了很大的改善。连接(JOIN)子所以更有效率一些,是因为MySQL不需要再内存中创建临时表来完成这个逻辑上的需要两个步骤的查询工作。
?
数据库优化 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?
优化表的类型
在MySQL中,可以使用函数PROCEDUREANALYSE()对当前应用的表进行分析,改函数可以对数据表中列的数据类型提出优化建议,用户可以根据应用的实际情况酌情考虑是否实施优化。
?
mysql> select* from duck_cust procedure analyse()\G?
*************************** 1. row ***************************?
Field_name: sakila.duch_cust.cust_num?
Min_value: 1?
Max_value: 6?
Min_length: 1?
Max_length: 1?
Empties_or_zeros: 0?
Nulls: 0?
Avg_value_or_avg_length: 3.5000?
Std: 1.7078?
Optimal_fieldtype: ENUM(‘1',‘2',‘3',‘4') NOT NULL?
*************************** 2. row ***************************?
……
?
大存储量解决
1.分库分表
?
2.分区
?
主要目的:
?
1.减少表的记录数
?
2.减小对操作系统的负担压力
?
中间表
中间表的产生:
1.view 视图
2.重新生成一个新表
?
Mysql服务器优化 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?
myisam读锁定
?
lock table t1 read
2.开启另一个mysql连接终端,接着去尝试:
?
select * from t1
3.再insert、update和delete t1这张表,你会发现所有的数据都停留在终端上没有真正的去操作
?
4.读锁定对我们在做备份大量数据时非常有用.
?
mysqldump -uroot -p123 test >test.sql
myisam写锁定
?
lock table t1 write
2.打开另一个mysql终端,尝试去select、insert、update和delete这张表t1,你会发现都不能操作,都会停留在终端上,只有等第一个终端操作完毕,第二个终端才能真正执行.
?
3.可见表的写锁定比读锁定更严格
?
4.一般情况下我们很少去显式的去对表进行read 和write锁定的,myisam会自动进行锁定的.
?
Mysql服务器优化 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
?
二进制日志
1.log-bin=mysql-bin
?
查看bin-log日志:
?
mysql> show binary logs;
查看最后一个bin-log日志:
?
mysql> show master status;
慢查询日志
开户和设置慢查询时间:
?
vi /etc/my.cnf
log_slow_queries=slow.log
long_query_time=5
慢查询次数:
?
mysql> show global status like "%quer%"
socket问题
mysql socket无法登录
?
1. 有时登录mysql时提示不能用socket登录,此时可以换成tcp方式去登录,但是可以测试时可以这样用,但是必须要在php去用之前把这个事情解决了.
?
?
[root@localhost mysql]# mysql -uroot -pwei --protocol tcp -hlocalhost
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connectionid is 34
Server version: 5.0.77-log Source distribution
Type 'help;'or '\h' for help. Type '\c'to clear the buffer.
mysql>
这样就可以登录,这样就不用mysql.sock来登录,而mysql.sock是启动mysqld服务时产生的
?
root密码丢失
?
root密码丢失
破解
?
1.service
mysqld stop
2. mysqld_safe --skip-grant-tables --user=mysql &?
//跳过授权表mysql.user和mysql.db这些表
3. mysql -uroot
4. set password=password("wei");?
//用这一条语句结果报错,就是因为加了--skip-grant-tables
4. mysql>update user set password=password("wei") where user='root'?
and host='localhost';
5. mysql> set password for root@localhost=password("wei");
6. mysql> set password=password("wei");?
//和第五步一样,都可能成功修改密码