通过8个方法优化Mysql数据库:创建索引、复核索引、索引不会包含含有NULL值的列、使用短索引、排序的索引问题、like语句操作、不要在列上进行运算、不使用NOT  IN 和<>操作

1、创建索引

对于查询占主要的应用来说,索引显得尤为重要。很多时候性能问题很简单的就是因为我们忘了添加索引造成的,或者说没有添加更为有效的索引导致的。如果不添加索引的话,那么查找任何哪怕只有一条特定的数据都会进行一次全表扫描,如果一张表的数据量很大而符合条件的结果又很少,那么不加索引会引起致命的性能下降。但是也不是什么情况都非得建索引不可,比如性别可能有只有两个值,建索引不仅没什么优势,还会影响到更新的速度,这被称为过度索引。

2、复核索引

比如有一条语句是这样的:select  * from users where area='beijing'  and age=22;

如果我们是在area和age上分别创建单个索引的话,由于mysql查询每次只能使用一个索引,所以虽然这样已经相对不做索引时全表扫描提高了很多效率,但是如果在area、age两列上创建复核索引的话将带来更高的效率。如果我们创建了(area,age,salary)的复核索引,那么其实相当于创建了(area,age,salary)、(area,age)、(area)三个索引,这被称为最佳左前缀特性。因此我们在创建复核索引时应该将最常用的限制条件的列放在最左边,依次递减。

3、索引不会包含含有NULL值的列

只要列中包含有NULL值都将不会被包含在索引中,复核索引中只要有一列有NULL值,那么这一列对于此复核索引就是无效的。所以我们在数据库设计的时候不要让字段默认值为NULL.

4、使用短索引

对串列进行索引,如果可能应该指定一个前缀长度。例如,如果有一个CHAR(255)的列,如果在前10个或者20个字符内,多数值是唯一的,那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。

5、排序的索引问题

mysql查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by 中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复核索引。

6、like语句操作

一般情况下不鼓励使用like操作,如果非使用不可,如何使用也是一个问题。like "%aaa%",不会使用索引,而like "aaa%" 可以使用索引。

7、不要在列上进行运算

select * from users where YEAR(adddate)<2007;

将在每个行上进行运算,这将导致索引失效而进行全表扫描,因此我们可以改成

select * from users where adddate<'2007-01-01';

8、不使用NOT IN 和 <> 操作

NOT IN 和 <> 操作都不会使用索引将进行全表扫描。NOT  IN 可以NOT EXISTS 代替,id<>3则可使用id>3 or id<3 来代替

最新文章

  1. SQL入门经典(七) 之脚本和批处理
  2. Tomcat服务器原理详解
  3. [js/jquery]移动端手势拖动,放大,缩小预览图片
  4. js合并行
  5. FPSCalc——简单FPS观测类
  6. 学习笔记——Maven实战(十)Maven 3,是时候升级了
  7. 【宋红康学习日记1】关于环境变量设置出现的问题——找不到或无法加载主类 java
  8. javascript 通用loading动画效果
  9. 场景类(CCSence)
  10. git 快速使用(本地仓库同步到远程仓库)
  11. jupyter巨好玩-常用设置
  12. ConcurrentHashMap源码分析(一)
  13. Android HotFix动态加载框架介绍
  14. C语言-第一次作业
  15. 关于MySQL死锁
  16. Mysql partition by
  17. ES6最新语法
  18. centos配置golang &amp; SVN客户端配置
  19. python高级特性:切片/迭代/列表生成式/生成器
  20. Spring接管JDBC

热门文章

  1. 【转】PHP面试总结
  2. 记一次函数异常(getopt_long)
  3. 吾日三省吾身 java核心代码 高并发集群 spring源码&amp;思想
  4. tomact在windows系统下安装
  5. Spring学习(五)bean装配详解之 【XML方式配置】
  6. PHP代码审计学习(1)
  7. Centos-进程运行状态-ps
  8. 你不可不知的WEB安全知识(第一部分:HTTPS, TLS, SSL, CORS, CSP)
  9. 玩转Libmodbus(二) 写代码体验
  10. 063 01 Android 零基础入门 01 Java基础语法 08 Java方法 01 无参无返回值方法