mysql学习笔记
一、优化
索引
索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索引包含多个列。
创建索引时,你需要确保该索引是应用在 SQL 查询语句的条件(一般作为 WHERE 子句的条件)。
实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。
上面都在说使用索引的好处,但过多的使用索引将会造成滥用。因此索引也会有它的缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。
创建索引时,1该索引列不能为null;2该索引字段不能过长
语法:
Alter Table `TableName` Add Index IndexName(columnName);
Drop Index IndexName On TableName
分区
一张表对应三个文件:frm(表结构)、myd(表数据)、myi(表索引)
分区的两种方式:横向分区,纵向分区
mysql ---- 横向分区
主要的分区方式:
- range
- list
- hash
- key
- 子分区
mysql的疑难杂症
一、执行卡死
- 执行一个存储过程时,一直发现执行不成功
- show PROCESSLIST 发现有一个线程是
Waiting for table metadata lock
解决方案:
select trx_state, trx_started, trx_mysql_thread_id, trx_query from information_schema.innodb_trx
然后kill 掉所有的未提交的事务
kill 9 (9对应的是trx_mysql_thread_id)