background image

MySQL 优化技巧

MySQL 优化技巧

      1.查询时将 like 子句转换成 and: where name like 'abc%'转换成 where name>='abc' and 
name<'abc'
    2.用>=替代>:如:id>3 和 id>=4 的区别是,前者 dbms 先跳 id=3 的记录,往后扫描表,而后者直
接跳到

4 往后扫描

    3.利用 LIMIT 1 取得唯一行:一个 LIMIT 1 会令你的查询更加有效。这样数据库引擎发现
只有

1 后将停止扫描,而不是去扫描整个表或索引

    4.索引中的检索字段:索引不仅是主键或唯一键。如果你想搜索表中的任何列,你应该一
直指向索引。

    5.保证连接的索引是相同的类型;如果应用程序中包含多个连接查询,你需要确保你链接
的列在两边的表上都被索引。这会影响

MySQL 如何优化内部联接操作。此外,加入的列,

必须是同一类型。例如,你加入一个

DECIMAL 列,而同时加入另一个表中的 int 列,

MySQL 将无法使用其中至少一个指标。即使字符编码必须同为字符串类型。
    6.不要使用 BY RAND()命令:这是一个令很多新手程序员会掉进去的陷阱。你可能不知不
觉中制造了一个可怕的平静。这个陷阱在你是用

BY RAND()命令时就开始创建了。如果

您真的需要随机显示你的结果,有很多更好的途径去实现。诚然这需要写更多的代码,但是

能避免性能瓶颈的出现。问题在于,

MySQL 可能会为表中每一个独立的行执行 BY RAND()

命令(这会消耗处理器的处理能力),然后给你仅仅返回一行。

    7.尽量避免 SELECT *命令:从表中读取越多的数据,查询会变得更慢。他增加了磁盘需要
操作的时间,还是在数据库服务器与

WEB 服务器是独立分开的情况下。你将会经历非常漫

长的网络延迟,仅仅是因为数据不必要的在服务器之间传输。始终指定你需要的列,这是一

个非常良好的习惯。

    8.从 PROCEDURE ANALYSE()中获得建议:PROCEDURE ANALYSE()可让 MySQL 的柱
结构分析和表中的实际数据来给你一些建议。如果你的表中已经存在实际数据了,能为你的

重大决策服务。

    9.将 IP 地址存储为无符号整型:许多程序员在创建一个 VARCHAR(15)时并没有意识到
他们可以将

IP 地址以整数形式来存储。当你有一个 INT 类型时,你只占用 4 个字节的空间,

这是一个固定大小的领域。你必须确定你所操作的列是一个

UNSIGNED INT 类型的,因为 IP

地址将使用

32 位 unsigned integer。

    10.优化你的 MySQL 查询缓存:查询时尽量不要用 mysql 的内容函数如 CURDATE()等,
否则不能缓存查询语句

    11.用 EXPLAIN 使你的 SELECT 查询更加清晰:EXPLAIN 查询的结果,可以告诉你那些
索引正在被引用,表是如何被扫描和排序的等等,如果整表扫描,说明需要添加一个索引

    12.调整 where 子句的顺序:那些过滤掉最多数据的条件放到 where 子句最后