对问题的一些简短回答。据我所知,您对使用感到困惑indexes
如果比率 - 则考虑在列上创建索引
Consideration 1
-
(列的唯一条目数)/(列中的总条目数)~= 1
即特定列中不同行的计数较高。
创建一个extra index
总是会给 MySQL 服务器带来开销,所以你MUST NOT创建每一列index
. 单个表可以拥有的索引数量也有限制 = 每个表 64 个
现在如果你的tenant_id
存在于所有搜索查询中,您应该将其视为index
或在一个composite key
,
前提是——
Consideration 2
- 数量UPDATEs
少于该数量SELECTs
on the tenant_id
Consideration 3
- The indexe
s 应尽可能小data types
. You MUST NOT创建一个varchar 64
一个索引
http://www.mysqlperformanceblog.com/2012/08/16/mysql-indexing-best-practices-webinar-questions-followup/ http://www.mysqlperformanceblog.com/2012/08/16/mysql-indexing-best-practices-webinar-questions-followup/
Point to Note 1
- 即使您确实将任何列声明为索引,MySQL 优化器可能仍然不会将其视为查询执行的最佳计划。所以总是使用EXPLAIN
知道发生了什么事。http://www.mysqlperformanceblog.com/2009/09/12/3-ways-mysql-uses-indexes/ http://www.mysqlperformanceblog.com/2009/09/12/3-ways-mysql-uses-indexes/
Point to Note 2
-
你可能想要cache
您的搜索查询,因此请记住不要在您的搜索中使用不可预测的语句SELECT
查询,例如NOW()
最后 - 进行 PK (tenant_id, ID) 不应影响表上的连接。
还有一个很棒的链接可以回答您所有的一般问题 -http://www.percona.com/files/presentations/WEBINAR-MySQL-Indexing-Best-Practices.pdf http://www.percona.com/files/presentations/WEBINAR-MySQL-Indexing-Best-Practices.pdf