我有一张表。但在phpmyadmin中;创建索引时,我脑子里有东西卡住了。选择并创建多个列时,将为3列创建一个索引。
这与逐个在列上创建索引有何不同?
此外,哪些列更有意义为以下查询创建索引?
表
id | 用户名 | 永久链接 | tbody>
---|---|---|
2 | 示例 | 实例 | <1>
创建索引时,有些操作会更慢(如插入(,并且会消耗更多的磁盘空间和内存。
您应该在具有高基数的列(具有非常不常见或唯一值的列(上创建索引,并在WHERE子句中使用该索引以使它们更快。
例如,对于permalink
列,您应该有一个索引,但由于基数较低,status
上没有索引。如果WHERE子句中有3列,那么在所有3列上都有一个复合索引可能会更快。
.. WHERE column1 = 'a' AND column2 = 'b' AND column3 = 'c'
首先,为具有高基数的列单独创建索引。在您有大量数据并且系统开始减速后,使用EXPLAIN SELECT。。。查询,以了解查询中使用了哪些索引。然后根据需要使用复合索引进行优化。我使用JetProfiler或NewRelic之类的工具来监控系统并查找慢速查询。你不可能从一开始就预料到一切。此外,MySQL慢速查询日志是查找需要优化的内容的好地方。
https://dev.mysql.com/doc/refman/5.7/en/slow-query-log.html
对于使用所有i列组合的查询,将多个i的列索引在一起。
假设您有table
、column1
和column2
。您应该为这两列建立索引(首先考虑它们的类型和大小(,以便查询SELECT * FROM table WHERE column1 = something1 AND column2 = something2
。
请记住,这并不总是最佳的做法(另一个答案解释了原因(:(