10bet网址
MySQL 8.0参考手册
相关文件10bet官方网站 本手册下载 从本手册中摘录

8.6.1优化Myisam查询

加速查询的一些一般提示MyISAM表:

  • 为了帮助MySQL更好地优化查询,请使用分析表或者跑步myisamchk - 分析在加载了数据的表上。这将更新每个索引部分的值,该部分指示具有相同值的平均行数。(对于惟一索引,它总是1。)MySQL使用它来决定在基于一个非常量表达式连接两个表时选择哪个索引。您可以使用显示指数从tbl_name.和检查基数价值。Myisamchk --description - verbose.显示索引分布信息。

  • 要根据索引对索引和数据排序,请使用myisamchk——排序索引排序记录= 1(假设你想按索引1排序)。如果你有一个唯一的索引,你想根据索引顺序读取所有的行,这是一个很好的方法使查询更快。第一次以这种方式对一个大表排序时,可能要花很长时间。

  • 尽量避免复杂选择查询MyISAM频繁更新的表,以避免表锁定由于读者和编写者之间的争用而发生的表。

  • MyISAM支持并发插入:如果一个表的数据文件中间没有空闲块,可以这样做在其他线程从表中读取数据的同时,向表中添加新的行。如果能够做到这一点很重要,请考虑以避免删除行的方式使用表。另一种可能性是跑步优化表在从表中删除了很多行之后,对表进行碎片整理。属性可以改变此行为concurrent_insert.多变的。即使在已删除行的表中,您也可以强制添加新行(并因此允许并发插入)。看到第8.11.3节,“并发插入”

  • MyISAM对于经常更改的表,应尽量避免所有变长列(VARCHAR斑点, 和文本).即使只包含一个变长列,该表也使用动态行格式。看到第16章,替代存储引擎

  • 仅仅因为行变大而将桌子分成不同的表格通常是没有用的。在访问一行时,最大的性能命中是磁盘寻找所需的行,以查找行的第一个字节。找到数据后,大多数现代磁盘可以读取整个行足够快,以便大多数应用程序。拆分表的唯一情况是一个明显的差异是如果是一个MyISAM表使用动态行格式,可以更改为固定行大小,或者如果您经常需要扫描表,但不需要大多数列。看到第16章,替代存储引擎

  • ALTER TABLE……命令Expr1.Expr2., ...如果你通常检索行Expr1.Expr2., ...秩序。通过在对表进行大量更改后使用此选项,您可以获得更高的性能。

  • 如果您经常需要基于来自大量行的信息计算诸如计数的结果,则可能最好介绍一个新表并实时更新计数器。更新以下表格非常快:

    更新tbl_name.count_colcount_col+ 1,key_col不变

    当您使用MySQL存储引擎等时,这非常重要MyISAM只有表级锁定(具有单个作家的多个读者)。这也具有大多数数据库系统提供更好的性能,因为在这种情况下,行锁定管理器较少。

  • 优化表定期使用动态格式避免碎片化MyISAM表。看到第16.2.3节“Myisam表存储格式”

  • 宣布A.MyISAMdelay_key_write = 1Table选项使索引更新更快,因为在关闭表之前,索引不会被刷新到磁盘。这样做的缺点是,如果在这样一个表打开时,有什么东西杀死了服务器,那么您必须通过使用myisam_recover_options.系统变量集,或通过运行myisamchk在重新启动服务器之前。(但是,即使在这种情况下,你也不应该使用任何东西丢失任何东西DELAY_KEY_WRITE,因为可以始终从数据行生成关键信息。)

  • 字符串是自动前缀和终端空间压缩MyISAM索引。看到第13.1.15节“创建索引声明”

  • 您可以通过缓存申请中的查询或答案,然后执行许多插入或更新。在此操作期间锁定表可确保索引缓存仅在所有更新后刷新一次。