mysql数据库优化
2016-06-27 19:37
501 查看
1.创建索引:
(1).使用or
如select * from student where age>10 or math>80
单有一个创建索引无用,必须同时在age和math上两个同时建立索引,
(2)like
like使用‘%aa’不是使用索引,使用‘aa%’才会使用索引
(3)列类型如为字符串,必须输入为字符串,否则索引失效
(4)goup by 默认分组查询后有默认的排序,可能降低速率,可以使用order by null来处理
(5)使用and
使用and时可以通过创建复合索引方式进行查询
比如有一条语句是这样的:select * from users where area='beijing' and age=22;
如果我们是在area和age上分别创建单个索引的话,由于mysql查询每次只能使用一个索引,所以虽然这样已经相对不做索引时全表扫描提高了很多效率,但是如果在area、age两列上创建复合索引的话将带来更高的效率。如果我们创建了(area, age, salary)的复合索引,那么其实相当于创建了(area,age,salary)、(area,age)、(area)三个索引,这被称为最佳左前缀特性。因此我们在创建复合索引时应该将最常用作限制条件的列放在最左边,依次递减。
(6)多表查询
多表查询最好使用join来使用查询,如使用select * from user left join product on user.id = product.user_id
(7)索引不会包含有NULL值的列
只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。
(8)不要在列上进行运算
select * from user where YEAR(agedate)>2007
上述的查询将造成索引失效,从而通过全表扫面进行查询应该通过 select * from user where agedate >‘2007-01-01’
(9)不使用NOT IN和<>操作
NOT IN和<>操作都不会使用索引将进行全表扫描。NOT IN可以NOT EXISTS代替,id<>3则可使用id>3 or id<3来代替。
(1).使用or
如select * from student where age>10 or math>80
单有一个创建索引无用,必须同时在age和math上两个同时建立索引,
(2)like
like使用‘%aa’不是使用索引,使用‘aa%’才会使用索引
(3)列类型如为字符串,必须输入为字符串,否则索引失效
(4)goup by 默认分组查询后有默认的排序,可能降低速率,可以使用order by null来处理
(5)使用and
使用and时可以通过创建复合索引方式进行查询
比如有一条语句是这样的:select * from users where area='beijing' and age=22;
如果我们是在area和age上分别创建单个索引的话,由于mysql查询每次只能使用一个索引,所以虽然这样已经相对不做索引时全表扫描提高了很多效率,但是如果在area、age两列上创建复合索引的话将带来更高的效率。如果我们创建了(area, age, salary)的复合索引,那么其实相当于创建了(area,age,salary)、(area,age)、(area)三个索引,这被称为最佳左前缀特性。因此我们在创建复合索引时应该将最常用作限制条件的列放在最左边,依次递减。
(6)多表查询
多表查询最好使用join来使用查询,如使用select * from user left join product on user.id = product.user_id
(7)索引不会包含有NULL值的列
只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。
(8)不要在列上进行运算
select * from user where YEAR(agedate)>2007
上述的查询将造成索引失效,从而通过全表扫面进行查询应该通过 select * from user where agedate >‘2007-01-01’
(9)不使用NOT IN和<>操作
NOT IN和<>操作都不会使用索引将进行全表扫描。NOT IN可以NOT EXISTS代替,id<>3则可使用id>3 or id<3来代替。
相关文章推荐
- Spark insertIntoJDBC找不到Mysql驱动解决方法
- mysql: error while loading shared libraries: libmysqlclient
- mysql 基本操作 alter
- mysql auto_increment 初始值从0开始
- mysql 主从复制
- 【Mysql】mysql查询超时JDBC源码浅析
- jsp中使用动态数据进行mySQL数据库的两种操作方法
- mysqldump和mydumper的比较
- MYSQL性能查看(命中率,慢查询)
- MySQL 索引分析
- window下mysql安装以及问题解决方法
- MySQL出现SQL Error (2013)连接错误的解决方法
- MySQL行级锁、表级锁、页级锁详细介绍
- mysql分表技术(学习心得)
- mysql二进制日志
- Mysql 按行dump出数据
- Codeigniter 的mysql的 limit 函数,和平常在mysql中不一致,因此修改。
- Ubantu MySQL数据库操作
- MYSQL 索引页 结构图
- 在MySQL中阻止UPDATE语句没有添加WHERE条件的发生