Home >Database >Mysql Tutorial >MySQL语句优化的原则

MySQL语句优化的原则

WBOY
WBOYOriginal
2016-06-07 15:20:151028browse

欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 1、使用索引来更快地遍历表。 缺省情况下建立的索引是非群集索引,但有时它并不是最佳的。在非群集索引下,数据在物理上随机存放在数据页上。合理的索引设计要建立在对各种查询的分析和预测上。一般

欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入

  1、使用索引来更快地遍历表。

  缺省情况下建立的索引是非群集索引,但有时它并不是最佳的。在非群集索引下,数据在物理上随机存放在数据页上。合理的索引设计要建立在对各种查询的分析和预测上。一般来说:

  a.有大量重复值、且经常有范围查询( > , =,

  b.经常同时存取多列,且每列都含有重复值可考虑建立组合索引;

  c.组合索引要尽量使关键查询形成索引覆盖,其前导列一定是使用最频繁的列。索引虽有助于提高性能但不是索引越多越好,恰好相反过多的索引会导致系统低效。用户在表中每加进一个索引,维护索引集合就要做相应的更新工作。

  2、在海量查询时尽量少用格式转换。

  3、ORDER BY和GROPU BY使用ORDER BY和GROUP BY短语,任何一种索引都有助于SELECT的性能提高。

  4、任何对列的操作都将导致表扫描,它包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等号右边。

  5、IN、OR子句常会使用工作表,使索引失效。如果不产生大量重复值,可以考虑把子句拆开。拆开的子句中应该包含索引。

  6、只要能满足你的需求,应尽可能使用更小的数据类型:例如使用MEDIUMINT代替INT

  7、尽量把所有的列设置为NOT NULL,如果你要保存NULL,手动去设置它,而不是把它设为默认值。

  8、尽量少用VARCHAR、TEXT、BLOB类型

  9、如果你的数据只有你所知的少量的几个。最好使用ENUM类型

  10、正如graymice所讲的那样,建立索引。

  以下是我做的一个实验,可以发现索引能极大地提高查询的效率:

  我有一个会员信息表users,里边有37365条用户记录:

  在不加索引的时候进行查询:

  sql语句A:

  复制内容到剪贴板

  代码:

  select * from users where username like %许%;

  在Mysql-Front中的8次查询时长为:1.40,0.54,0.54,0.54,0.53,0.55,0.54 共找到960条记录

  sql语句B:

  复制内容到剪贴板

  代码:

  select * from users where username like 许%;

  在Mysql-Front中的8次查询时长为:0.53,0.53,0.53,0.54,0.53,0.53,0.54,0.54 共找到836条记录

  sql语句C:

  复制内容到剪贴板

  代码:

  select * from users where username like %许;

  在Mysql-Front中的8次查询时长为:0.51,0.51,0.52,0.52,0.51,0.51,0.52,0.51 共找到7条记录

  为username列添加索引:

  复制内容到剪贴板

  代码:

  create index usernameindex on users(username(6));

  再次查询:

  sql语句A:

  复制内容到剪贴板

  代码:

  select * from users where username like %许%;

  在Mysql-Front中的8次查询时长为:0.35,0.34,0.34,0.35,0.34,0.34,0.35,0.34 共找到960条记录

[1] [2] 

MySQL语句优化的原则

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Previous article:mysql administatorNext article:mysql实现master