索引的存储分类
MyISAM存储引擎的表的数据和索引时自动分开储存的。各自是一个独立的文件
Inodb 存储引擎的表的结构和索引都是存储在一个表的空间里。但可以有多个文件组成
mysql目前不支持函数索引
mysql如何使用索引
索引用于快速找出在某个列中有一特定值的行。对相关列使用索引时提供select操作性能的最佳途径
索引使用
使用like的查询 索引模糊尽量把 % 放到后面。
select *from t2 where name like “%aa”(用不到索引)
select *from t2 where name like “aa%” (使用索引)
使用and 或者or查询的时候。两端最好都加上索引字段
当该字段类型和该字段的值不匹配的时候,不适用索引
查看索引使用过的情况
show status like ‘handler_read%’
查看索引被读的次数
handler_read_end_next 数字越大。说明需要使用索引优化
优化group by语句
如果使用group by 但用户要避免排序结果的损耗,则可以使用order by null 来禁止排序
数据表的优化
检查数据表
check table tb_name
修复数据表(碎片整理)
optimize table tb_name
数据库的优化
1.优化表的类型
2.通过拆分提高表的访问效率
3.使用中间表提高统计查询速度
数据库服务器的优化
四种字符集尽量选用utf8
character-set-server=utf8
default-character-set=utf8
collation-server=utf_general_ci(字符集校验)
开启bin-log日志
my.cnf
log-bin =mysql-bin #开启mysql bin log日志
开启慢查询日志
show variables like “%slow%”
[mysqld]
log_slow_queries=slow.log
log_slow_time=5(慢查询的时间)
socket丢失的问题
socket=/tmp/mysql.sock
通过tcp 临时登录
mysql-uroot -proot --protocol tcp -hlocalhost
root 密码的破解
1.跳过授权表
mysqld_safe --skip-grant-tables --user=mysql &
2.使用没有密码的root登录
mysql -uroot
3.更改密码
update mysql.user set password=password(“new password”)