Geo*_*rge 4 mysql indexing select join where
我有一个 mysql 表,其中有 900 万条记录,但没有设置任何索引。我需要根据一个公共 ID 将它加入另一个表。我将为此 ID 添加一个索引,但在select和where子句中还有其他字段。
我应该为where子句中的所有字段添加索引吗?
select子句中的字段呢?我应该为所有字段创建一个索引,还是为每个字段创建一个索引?
更新 - 添加表和查询
这里是查询-我需要根据店铺名称和店铺ID(店铺名称和ID本身不是唯一的)逐个获取销售数量、商品名称和商品ID
SELECT COUNT(*) as salescount, items.itemName, CONCAT(items.ID, items.productcode) as itemId
FROM items JOIN sales ON items.itemId = sales.itemId WHERE items.StoreName = ?
AND sales.storeID = ? GROUP BY items.ItemId ORDER BY salescount DESC LIMIT 10;
Run Code Online (Sandbox Code Playgroud)
这是销售表:
+----------------+------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------+------------------------------+------+-----+---------+-------+
| StoreId | bigint(20) unsigned | NO | | NULL | |
| ItemId | bigint(20) unsigned | NO | | NULL | |
+----------------+------------------------------+------+-----+---------+-------+
Run Code Online (Sandbox Code Playgroud)
和项目表:
+--------------------+------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+------------------------------+------+-----+---------+-------+
| ItemId | bigint(20) unsigned | NO | PRI | NULL | |
| ProductCode | bigint(20) unsigned | NO | | NULL | |
| ItemName | varchar(100) | NO | | NULL | |
| StoreName | varchar(100) | NO | PRI | NULL | |
+--------------------+------------------------------+------+-----+---------+-------+
Run Code Online (Sandbox Code Playgroud)
你应该指数将要搜索的领先表中在各个领域WHERE中的条款,并在驱动表WHERE和JOIN条款。
使索引覆盖查询中使用的所有字段(包括SELECT和ORDER BY子句)也将有所帮助,因为不需要表查找。
只需在此处发布您的查询,我可能会告诉您如何为表建立索引。
更新:
您的查询最多将返回1行1作为COUNT(*)
这将选择具有给定StoreID(即PRIMARY KEY)的销售,并加入销售itemId和给定中的项目StoreName(此组合也是一个PRIMARY KEY)。
此连接要么成功(返回1行)要么失败(不返回任何行)。
如果成功,COUNT(*)将是1。
如果这确实是您想要的,那么您的表就可以很好地建立索引。
但是,在我看来,您的表设计有点复杂,并且在复制字段定义时您只是遗漏了一些字段。
更新 2:
在上创建复合索引 sales (storeId, itemId)
请确保您PRIMARY KEY的items定义为(StoreName, ItemId)(按顺序)。
如果PK被定义为(ItemID, StoreName),则在 上创建索引items (StoreName, ItemID)。
| 归档时间: |
|
| 查看次数: |
5789 次 |
| 最近记录: |