Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL表优化_Php_Mysql_Optimization_Query Optimization - Fatal编程技术网

Php MySQL表优化

Php MySQL表优化,php,mysql,optimization,query-optimization,Php,Mysql,Optimization,Query Optimization,我希望优化数据库中的一些表,因为当前在高负载下等待时间太长 忽略命名模式(这很糟糕),但下面是一个邮件列表表的示例,其中包含大约1000000条记录。目前,我认为如果不完全重新做这一切,我就无法真正将其正常化 现在。。。以下各项将产生多大影响: 更改字段(如活动字段) 使用布尔值而不是 一连串的是/否 结合一些领域,如 地址1、2、3、4使用单个 “文本”字段 减少可用字符,例如。 使其成为VARCHAR(200)而不是 将值设置为NULL而不是 留下空白 还有一件事我很感兴趣,包括这个表

我希望优化数据库中的一些表,因为当前在高负载下等待时间太长

忽略命名模式(这很糟糕),但下面是一个邮件列表表的示例,其中包含大约1000000条记录。目前,我认为如果不完全重新做这一切,我就无法真正将其正常化

现在。。。以下各项将产生多大影响:

  • 更改字段(如活动字段) 使用布尔值而不是 一连串的是/否
  • 结合一些领域,如 地址1、2、3、4使用单个 “文本”字段
  • 减少可用字符,例如。 使其成为VARCHAR(200)而不是
  • 将值设置为NULL而不是 留下空白
还有一件事我很感兴趣,包括这个表在内的几个表使用InnoDB而不是标准的MyISAM,这是推荐的吗

前端是用PHP编写的,所以我也会查看这些代码,目前我只是在查看数据库级别,但任何建议或帮助都将非常受欢迎


提前谢谢

您为表格提出的任何更改都不可能对性能产生任何可测量的影响

如果行格式是动态的,则减少VARCHAR列的最大长度无关紧要,并且给定VARCHAR列的数量和长度,动态行格式将是最合适的。)

您真正需要调优的是针对表运行的SQL

很可能,添加、替换和/或删除索引将是一个低挂果实

如果没有实际的SQL,没有人能够提出任何可靠的调优建议


对于此查询:

SELECT email from table WHERE mailinglistID = X.
我会确保我在
(mailinglistId,email)
上有一个索引

 CREATE INDEX mytable_ix2 ON mytable (mailinglistId, email);
但是,要小心添加不需要的索引,因为索引的维护不是免费的,索引会使用资源(内存和i/o)


这是您能够在该表上进行的唯一调优,而无需进行一些编码更改


要真正优化数据库,需要确定性能瓶颈。(这是应用程序SQL的设计:获取表锁?从多个会话阻塞中并发插入?还是需要调整实例:增加缓冲区缓存的大小、innodb缓冲区缓存、键值区域、
显示innodb状态
可能会给你一些线索,

你必须发布一些在此表上使用的查询。你可以吗如果没有这一点,我真的帮不了你。我想说的大多数查询都是INSERT,然后从mailinglistID=X的表中选择email。其余字段不经常使用,只是为了获取特定电子邮件地址的进一步信息和电子邮件个性化-例如,亲爱的John Smith,此索引只会为该查询创造奇迹。如s当您选择更多字段(电子邮件除外)时,这将不再是一个覆盖索引,“mailinglistId”上的索引就足够了。是的,一月。但是没有必要在just(mailinglistId)上建立索引,如果我们已经有了一个以mailinglistId作为前导列的索引)是的,我只是说索引(mailinglistId)将比索引性能更好(邮件列表ID,电子邮件)如果电子邮件从未在WHERE、ORDER BY或GROUP BY part中使用,并且/或者您正在选择其他字段以及电子邮件。好的,非常感谢各位的回答-非常感谢。因此,如果我说有很多查询只是从表中选择*,那么在just mailinglistID上的索引将更可取?我不能说我已经对索引进行了太多的研究,但我需要最后,我会做的。