MySQL中数据类型相关的优化办法

2019-01-05 09:47:45于丽

使用多列索引

多列索引列有时很有用。一种技术是根据其他列建立一个散列值,并将其存储在一个独立的列中,然后可通过搜索散列值找到行。这只对精确匹配的查询有 效。(散列值对具有诸如“<”或“>=”这样的操作符的范围搜索没有用处)。在MySQL 3.23版及以上版本中,散列值可利用 MD5( ) 函数产生。散列索引对 BLOB 列特别有用。有一事要注意,在 MySQL 3.23.2 以前的版本中,不能索引 BLOB 类型。甚至是在 3.23.2 或更新的版本中,利用散列值作为标识值来查找 BLOB 值也比搜索 BLOB 列本身更快。

将 BLOB 值隔离在一个独立的表中

在某些情况下,将 BLOB 列从表中移出放入另一个副表可能具有一定的意义,条件是移出 BLOB 列后可将表转换为定长行格式。这样会减少主表中的碎片,而且能利用定长行的性能优势。

使用ANALYSE过程检查表列
如果使用的是 MySQL 3.23 或更新的版本,应该执行 PROCEDURE ANALYSE( ),查看它所提供的关于表中列的信息

ANALYSE([max elements,[max memory]])

它检验来自你的查询的结果并返回结果的分析。

max elements(缺省256)是analyse将注意的每列不同值的最大数量。这被ANALYSE用来检查最佳的列类型是否应该是ENUM类型。

max memory(缺省8192)是在analyse尝试寻找所有不同值的时候应该分配给每列的最大内存量。

SELECT ... FROM ... WHERE ... PROCEDURE ANALYSE([max elements,[max memory]])

例如:

mysql>SELECT * FROM student PROCEDURE ANALYSE(); mysql>SELECT * FROM student PROCEDURE ANALYSE(16,256);

相应输出中有一列是关于表中每列的最佳列类型的建议。第二个例子要求 PROCEDURE ANALYSE( ) 不要建议含有多于 16 个值或取多于 256 字节的 ENUM 类型(可根据需要更改这些值)。如果没有这样的限制,输出可能会很长;ENUM 的定义也会很难阅读。

根据 PROCEDURE ANALYSE( ) 的输出,会发现可以对表进行更改以利用更有效的类型。如果希望更改值类型,使用 ALTER TABLE 语句即可。

您可能感兴趣的文章:

MySQL查询优化之explain的深入解析MySQL Order by 语句用法与优化详解浅谈MySQL中优化sql语句查询常用的30种方法mysql数据库优化总结(心得)MySQL优化必须调整的10项配置浅析Mysql Join语法以及性能优化MySQL5.6基本优化配置MySQL性能优化之table_cache配置参数浅析MySQL性能优化之Open_Table配置参数的合理配置建议mysql优化limit查询语句的5个方法MySQL优化GROUP BY方案MySQL优化之对RAND()的优化方法21条MySQL优化建议(经验总结)MYSQL IN 与 EXISTS 的优化示例介绍MySQL数据库优化详解探究MySQL优化器对索引和JOIN顺序的选择大幅优化MySQL查询性能的奇技淫巧详解MySQL性能优化(二)Mysql效率优化定位较低sql的两种方式