MySql数据库优化方法
SQL 优化
1、查询语句中不要使用select *
2、尽量减少子查询,使用关联查询( left join,right join,inner join)替代
3、减少使用IN或者NOT IN ,使用exists , not exists或者关联查询语句替代
4、or的查询尽量用union或者union all代替(在确认没有重复数据或者不用剔除重复数据时,unionall会更好)
5、应尽量避免在where子句中使用!=或◇操作符,否则将引擎放弃使用索引而进行全表扫描。
6、应尽量避免在where子句中对字段进行null值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null可以在num上设置默认值О,确保表中num列没有null值,然后这样查询: select id from t where num=0
52、MySQL数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?
1、设计良好的数据库结构,允许部分数据冗余,尽量避兔join查询,提高效率。
2、选择合适的表字段数据类型和存储引擎,适当的添加索引。
3、MySQL库主从读写分离。
4、找规律分表,减少单表中的数据量提高查询速度。
5、添加缓存机制,比如 memcached , apc等。
6、不经常改动的页面,生成静态页面。
7、书写高效率的SQL。比如SELECT* FROM TABEL改为SELECT field_1,field_2, field_3 FROMTABLE.
优化数据库的方法
1、选取最适用的字段属性,尽可能减少定义字段宽度,尽量把字段设置NOTNULL,例如'省份'、性别'最好适用ENUM
2、使用连接(JOIN)来代替子查询
3、适用联合(UNION)来代替手动创建的临时表4、事务处理
5、锁定表、优化事务处理
6、适用外键,优化锁定表
7、建立索引
8、优化查询语句
说说对SQL语句优化有哪些方法?(选择几条)
1、Where子句中: where表之间的连接必须写在其他Where条件之前,那些可以过滤掉最大数量记录的条件必须写在 Where子句的未尾.HAVING最后。
2、用 EXISTS替代IN、用NOT EXISTS替代NOT IN。
3、避免在索引列上使用计算
4、避免在索引列上使用IS NULL和IS NOT NULL
5、对查询进行优化,应尽量避免全表扫描,首先应考虑在where 及order by涉及的列上建立索引。
6、应尽量避免在where子句中对字段进行null值判断,否则将导致引擎放弃使用索引而进行全表扫描
7、应尽量避免在where子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描
简单说一说drop.delete与truncate的区别
SQL中的drop、delete、truncate都表示删除,但是三者有一些差别delete和truncate只删除表的数据不删除表的结构
速度,一般来说: drop> truncate >delete
delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;
如果有相应的trigger,执行的时候将被触发. truncate,drop是ddl,操作立即生效,原数据不放到rollbacksegment中,不能回滚.操作不触发trigger
什么是视图
视图是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。对视图的修改不影响基本表。它使得我们获取数据更容易,相比多表查询
什么是内联接、左外联接、右外联接?
内联接(Inner Join ):匹配2张表中相关联的记录。
左外联接(Left OuterJoin ):除了匹配2张表中相关联的记录外,还会匹配左表中剩余的记录,右表中未匹配到的字段用NULL表示。
右外联接(Right Outer Join ):除了匹配2张表中相关联的记录外,还会匹配右表中剩余的记录,左表中未匹配到的字段用NULL表示。
在判定左表和右表时,要根据表名出现在Outer Join的左右位置关系
浙公网安备 33010602011771号