我的站点加载内容的时间太长,mysql 服务使用的 CPU 负载有时达到 200%。检查表发现表的所有列都用作索引。这是对的?它会影响性能吗?
我的服务器配置:16GB RAM,3.4GHz 大多数表大约有 25k ~ 50k 行。和 10~20 列。
不,您不会索引所有列。您可以索引专门包含在WHERE子句中的列,有时如果它们包含在ORDER BY.
在这种情况下,您需要一个索引type:
SELECT name FROM users WHERE type='admin'
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您需要一个索引active,type:
SELECT name FROM users WHERE type='admin' AND active=1
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您可能需要一个索引active,type,name:
SELECT name FROM users WHERE type-='admin' AND active=1 ORDER BY name LIMIT 10
Run Code Online (Sandbox Code Playgroud)
添加的索引越多,写入速度越慢,但读取速度越快。这是一个经典的权衡。仔细评估您需要哪些索引,并仅在有实际收益时才应用它们。不要只是因为你觉得他们应该在那里而扇他们耳光。
在超小表上,那些行数小于 1000 的表,索引不会有太大帮助,因为表扫描不会花费那么长时间。在任何重要的事情上,它们都是绝对必要的。
如果您遇到性能问题,我建议您的架构是最大的障碍,而不是缺少索引。