mysql常见问题

<强>事务级别


,,,,,,,,,

,,,,,,

,,,,,,,,,

,,,,,,,,在MySQL中,实现了这四种隔离级别,分别有可能产生问题如下所示:

 MySQL常见问题




:


索引并不是时时都会生效的,比如以下几种情况,将导致索引失效:

,,,1。如果条件中有,即使其中有条件带索引也不会使用(这也是为什么尽量少用或的原因)

 mysql常见问题

注意:要想使用,又想让索引生效,只能将或条件中的每个列都加上索引

2。对于多列索引,不是使用的第一部分,则不会使用索引

3。像查询是以%开头


 mysql常见问题


,,4.如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引


 mysql常见问题


5。如果mysql估计使用全表扫描要比使用索引快,则不使用索引

此外,查看索引的使用情况
显示状态像Handler_read %的;
大家可以注意:
handler_read_key:这个值越高越好,越高表示使用索引查询到的次数
handler_read_rnd_next:这个值越高,说明查询低效




索引失效的情形总结如下:

<李>

请求表上的数据行超出表总记录数30%,变成全表扫描

<李>

谓词上的索引列上存在零值

<李>

谓词上的索引列条件使用函数

<李>

谓词上的索引列条件进行了相关运算

<李>

谓词上的索引列条件上使用了& lt;祝辞,不是在操作符

<李>

复合索引中,第一个索引列使用范围查询——只能用到部份或无法使用索引

<李>

复合索引中,第一个查询条件不是最左索引列

<李>

模糊查询条件列最左以通配符%开始

<李>

内存表(堆表)使用哈希索引时,使用范围检索或者按

<李>

表关联字段类型不一样(包括某些长度不一样,但像varchar(10)与char(10)则可以,mysql经过内部优化处理)

,

索引类型(按用途非严格划分)

<李>

普通索引,这是最基本的索引,无任何限制

<李>

唯一索引,与普通索引类似,

<李>

<李>

单列索引,仅基于一列创建的索引

<李>

多列索引,基于多列创建的索引,

<李>

空间索引,用作地理数据存储

<李>

主键索引,是一种特殊的唯一索引,,通常在建表时创建。

索引的优缺点

,,,,,,索引的优点

<李>

大大减少了服务器需要扫描的数据量

<李>

可以帮助服务器避免排序或减少使用临时表排序

<李>

索引可以随机I/O变为顺序I/O

,

,,,,,,索引的缺点

<李>

需要占用磁盘空间,因此冗余低效的索引将占用大量的磁盘空间

<李>

降低DML性能,对于数据的任意增删改都需要调整对应的索引,甚至出现索引分裂

<李>

索引会产生相应的碎片,产生维护开销





复合索引:


联合索引又叫复合索引。对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分,例如索引是关键指标(a, b, c)。可以支持| a, b | a, b, c三种组合进行查找,但不支持b, c进行查找。当最左侧字段是常量引用时,索引就十分有效。

,,,两个或更多个列上的索引被称作复合索引。

,,,利用索引中的附加列,您可以缩小搜索的范围,但使用一个具有两列的索引不同于使用两个单独的索引。复合索引的结构与电话簿类似,人名由姓和名构成,电话簿首先按姓氏对进行排序,然后按名字对有相同姓氏的人进行排序。如果您知道姓,电话簿将非常有用,如果您知道姓和名,电话簿则更为有用,但如果您只知道名不姓,电话簿将没有用处。

,,,所以说创建复合索引时,应该仔细考虑列的顺序。对索引中的所有列执行搜索或仅对前几列执行搜索时,复合索引非常有用;仅对后面的任意列执行搜索时,复合索引则没有用处。

mysql常见问题