4、DELETE FROM table时 , InnoDB不会重新建立表,而是一行一行的删除 。
5、LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用 。
6、另外,InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表 。
1.索引概述
利用关键字 , 就是记录的部分数据(某个字段,某些字段,某个字段的一部分) , 建立与记录位置的对应关系,就是索引 。索引的关键字一定是排序的 。索引本质上是表字段的有序子集,它是提高查询速度最有效的方法 。一个没有建立任何索引的表 , 就相当于一本没有目录的书,在每次查询时就会进行全表扫描 , 这样会导致查询效率极低、速度也极慢 。如果建立索引,那么就好比一本添加的目录 , 通过目录的指引,迅速翻阅到指定的章节 , 提升的查询性能,节约了查询资源 。
2.索引种类
从索引的定义方式和用途中来看:主键索引,唯一索引,普通索引,全文索引 。
无论任何类型,都是通过建立关键字与位置的对应关系来实现的 。索引是通过关键字找对应的记录的地址 。
以上类型的差异:对索引关键字的要求不同 。
关键字:记录的部分数据(某个字段,某些字段,某个字段的一部分) 。
普通索引,index:对关键字没有要求 。
唯一索引,unique index:要求关键字不能重复 。同时增加唯一约束 。
主键索引,primary key:要求关键字不能重复,也不能为NULL 。同时增加主键约束 。
全文索引,fulltext key:关键字的来源不是所有字段的数据,而是从字段中提取的特别关键词 。
PS:这里主键索引和唯一索引的区别在于:主键索引不能为空值,唯一索引允许空值;主键索引在一张表内只能创建一个,唯一索引可以创建多个 。主键索引肯定是唯一索引 , 但唯一索引不一定是主键索引 。
3.索引原则
如果索引不遵循使用原则,则可能导致索引无效 。
(1)列独立
如果需要某个字段上使用索引,则需要在字段参与的表达中,保证字段独立在一侧 。否则索引不会用到索引, 例如这条sql就不会用到索引:select * from A where id+1=10;
(2)左原则
Like:匹配模式必须要左边确定不能以通配符开头 。例如:select * from A where name like '%小明%',不会用到索引 , 而select * from A where name like '小明%' 就可以用到索引(name字段有建立索引),如果业务上需要用到'%小明%'这种方式,有两种方法:1.可以考虑全文索引,但mysql的全文索引不支持中文;2.只查询索引列或主键列,例如:select name from A where name like '%小明%' 或 select id from A where name like '%小明%' 或 select id,name from A where name like '%小明%' 这三种情况都会用到name的索引;
复合索引:一个索引关联多个字段,仅仅针对左边字段有效果,添加复合索引时,第一个字段很重要,只有包含第一个字段作为查询条件的情况才会使用复合索引(必须用到建索引时选择的第一个字段作为查询条件,其他字段的顺序无关),而且查询条件只能出现and拼接,不能用or,否则则无法使用索引.
(3)OR的使用
必须要保证 OR 两端的条件都存在可以用的索引,该查询才可以使用索引 。
(4)MySQL智能选择
即使满足了上面说原则,MySQL也能弃用索引,例如:select * from A where id1;这里弃用索引的主要原因:查询即使使用索引,会导致出现大量的随机IO,相对于从数据记录的第一条遍历到最后一条的顺序IO开销 , 还要大 。
- mysql游标和存储过程是什么 mysql游标表名为变量
- 如何使用cmd命令行提示符登录mysql服务器 cmd中登陆mysql
- mysql怎么设置时区 mysql时间显示设置
- 招聘要精通mysql
- mysql 65535 8192 限制 mysql限制资源使用
- mysql有topn
- mysql协议包解析 mysqlicp协议
- mysql子查询和连接查询 mysql子查询插入
- Mysql使用索引查询 mysql使用round
- 云服务器游戏出现黑屏问题怎么解决? 云服务器游戏黑屏怎么办
