php - 索引mysql数据库中的所有列是否正确?

标签 php mysql apache

我的站点加载内容的时间太长,mysql 服务使用的 CPU 负载有时达到 200%。检查表发现表中所有的列都被用作索引。这是对的?它会影响性能吗?

我的服务器配置:16GB RAM,3.4GHz 大多数表格有大约 25k ~ 50k 行。以及 10~20 列。

All tables indexing are like this example. All columns as indexes

最佳答案

不,您不会索引所有列。您索引专门涉及 WHERE 子句的列,有时如果它们涉及 ORDER BY

在这种情况下,您需要一个关于type 的索引:

SELECT name FROM users WHERE type='admin'

在这种情况下,您需要在 active,type 上建立索引:

SELECT name FROM users WHERE type='admin' AND active=1

在这种情况下,您可能需要在 active,type,name 上建立索引:

SELECT name FROM users WHERE type-='admin' AND active=1 ORDER BY name LIMIT 10

添加的索引越多,写入速度越慢,但读取速度越快。这是一个经典的权衡。仔细评估您需要哪些索引,并仅在有切实好处时才应用它们。不要只是因为你觉得它们应该在那里而拍打它们。

在超小表上,那些行数小于 1000 的表,索引不会有太大帮助,因为表扫描不会花费那么长时间。对于任何重要的事情,它们都是绝对必要的。

如果您遇到性能问题,我建议您的架构是最大的障碍,而不是缺少索引。

关于php - 索引mysql数据库中的所有列是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39987543/

相关文章:

php - 更改密码脚本有效但不会将正确的密码写入数据库

php - Laravel withCount() 子查询

Arduino返回的PHP串口数据

php - 如何通过与 eloquent Laravel 5.2 的连接从表中返回最高的 id 值

php - 在单个查询中查找 mysql 表中某个条目左侧和右侧的条目

php - 添加记录到表 PHP/MySQL

apache - 在 Windows 框中使用 tomcat 托管 Solr 5.3

mysql - 用于定期存储用户记录的数据库模式

apache - 使用 https 将域重定向到另一个域时出错

apache - 仅将非 www 重定向到 www - 忽略所有子域