我的站点加载内容的时间太长,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/