Float使用小结
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Float使用小结相关的知识,希望对你有一定的参考价值。
参考技术A当一个元素浮动之后,它会被移出正常的文档流,然后向左或者向右平移,一直平移到碰到了所处的容器的边框,或者碰到了 另外一个浮动的元素 。
1.只有横向浮动,并没有纵向浮动。
2.当元素应用了float属性后,将会脱离普通流,其容器(父)元素将得不到脱离普通流的子元素高度。
3. 会将元素的display属性变更为block
4.浮动元素的后一个元素会围绕着浮动元素(典型运用是文字围绕图片),与应用了position的元素相比浮动元素并不会遮盖后一个元素。
5.浮动元素的前一个元素不会受到任何影响(如果你想让两个块状元素并排显示,必须让两个块状元素都应用float)
1)元素同时应用了position: relative、float、(top / left / bottom / right)属性后,则元素先浮动到相应的位置,然后再根据(top / left / bottom / right)所设置的距离来发生偏移。
2)元素同时应用了position: absolute及float属性,则float失效。
3)第一个元素应用了position之后会覆盖着接下来的float元素(如果两个元素所处的位置相同)
需要重点看下z-index章节
浮动元素margin和负元素的padding不会合并。 正常的也不会
元素被设置成浮动后,该元素会进行延伸进而包含其所有浮动的子元素。
比如如元素不是浮动的,子元素浮动,子元素比较高,则子元素会超出父元素高度,如果父元素设计了float属性,则会包裹所有子元素。
修改后:包裹元素
1、行内元素与浮动元素发生重叠,其边框,背景和内容都会显示在浮动元素之上
2、块级元素与浮动元素发生重叠时,边框和背景会显示在浮动元素之下,内容会显示在浮动元素之上
1)通过在容器中添加一个标签,设置该标签的样式为 clear: both
2)容器设置overflow: hidden或auto
Mysql查询优化小结
数据类型
简单原则:更小更好,简单就好,避免NULL
1)整型如int(10)括号中的值与存储大小无关
2)实数decimal比float与double占用更大存储空间且CPU不能直接对decimal进行计算
3)字符串列最大长度<=255varchar使用一字节保存长度,否则使用2字节。char(10)括号中是字符数,而不是字节数(字节数与列字符集相关)。
4)使用MYSQL的内建类型保存日期与时间,如datetime、timestamp
索引类型
在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引。
1) B-Tree索引
MyISAM、InnoDB使用B+Tree作为索引结构
MyISAM与InnoDB在实现上有所不同:MyISAM的主键与普通索引使用的结构一致,叶子节点保存了指向数据记录的地址。
InnoDB的主键采用聚集索引的方式(叶子节点
保存完整的行数据),而普通索引则与MyISAM
相似,但是叶子节点保存的是主键的值。
NDB Cluster内部实际使用T-Tree结构实现索引
MYSQL中能使用B-Tree索引的查询类型:
create table people (
last_name varchar(50) not null,
first_name varchar(50) not null,
dob date not null,
gender enum(‘m’,‘f’) not null,
key (last_name,first_name,don)
) engine=myisam;
1. 匹配全名
where last_nam=’a’ and first_name=’b’ and dob=’1990-01-01′
2. 匹配最左前缀
where last_name=’a’ 或 where last_name=’a’ and first_name=’b’
3. 匹配列前缀
where last_name like ‘a%’
4. 匹配范围值
where last_name >= ‘a’ and last_name<=’d’
5.精确匹配一部分并且匹配某个范围中另一部分
where last_name=’a’ and first_name like ‘k%’
6. 只访问索引的查询
B-Tree支持只访问索引的查询,不访问数据行(覆盖
索引)
select first_name from people where last_name=’a’
MYSQL中B-Tree索引的一些局限:
1. 查询不是最左前缀开始不能使用索引
where first_name=’a‘或where last_name like ‘%a’
2. 不能跳过索引中的列
where last_name=’a’ and dob=’1990-01-01′将只会所使用索引的第一列
3. 第一个范围条件右边的列不能使用索引
where last_name=’a’ and first_name like ‘a%’ and dob=’1990-01-01′ 因为like是范围查询,所以只会使用索引的前两列
2) Hash索引
Hash索引是建立在hash表基础上的,只对使用了索
引中每一列的精确查询有用(Memory和NDB支持,
InnoBD支持自适应hash索引)
Hash查询很快,但有些局限:
1. 索引中只保存hash码与行指针,不能覆盖索引
2. 不能使用hash索引排序
3. 不支持部分索引列匹配
4. 只支持’=‘,’IN’,‘<=>’相等比较查询,范围查询不能使用Hash索引
5.如果hash算法的碰撞率很高会影响索引性能
6. 碰撞率很高的Hash索引删除行代价很高
查询优化
1. 隔离列
隔离列意味着条件中的列不是表达式也不位于函数中
2. 前缀索引和索引选择性
索引选择性=不重复索引值/表中所有行,越大越好
前缀索引:对于char、varchar、blob、text类型可以
索引开始的几个字符,通过索引选择性确定索引几个
字符
KEY `bc` (`b`,`c`(5))
KEY `cd` (`c`(5),`d`(5))
3. 为排序使用索引
order by子句的顺序与索引中列顺序完全一致,并且所有列排序方向一样才可以使用索引排序。如果联接多表,只有order by子句中所有列引用的是第一个表才可以(查询优化器重写查询后)。
order by子句也要遵循索引最左前缀原则(前导列在where中精确匹配除外)。
例:
key t1 (day,in_id,con_id) 如下查询可以使用索引(explain的Extra中不会看到using filesort)
4. group by使用索引
group by 使用索引规则与order by一致。
group by 默认会进行排序操作,如果不关心返回顺序可以加上order by null来跳过排序。
distinct fd 如果fd列有索引,且where子句中使用了该索引,则也可以使用索引优化distinct
5. 优化min、max
select min(fd2) from tt1 where m=’2012-03-29′;
select fd2 from tt1 force index (fd2) where
m=’2012-03-29′ order by fd2 limit 1;
select max(fd2) from tt1 where m=’2012-03-29′;
select fd2 from tt1 force index (fd2) where
m=’2012-03-29′ order by fd2 desc limit 1;
6. 使用explain分析查询
只能对SELECT查询执行EXPLAIN分析。可以加
EXTENED关键字,然后使用show warnings查看查
询优化器重写后的SQL,如果对分区表可以加
PARTITIONS关键字。如:
EXPLAIN EXTENED SELECT …
以上是关于Float使用小结的主要内容,如果未能解决你的问题,请参考以下文章