mysql - 应该创建什么索引?

标签 mysql sql database database-optimization

我正在学习一个在线数据库类(class),我得到了这个问题。

假设我有表 USER、CHECKIN 和 PLACE。

USER(uid, uname, ucity),uid为主键。

PLACE(pid, pname, pxcoord, pycoord, pcity),pid为主键。

CHECKIN(uid,pid,cdate,ctime),(uid,cdate,ctime)为主键。

查询是

select c.uid, c.pid c.cdate
from user u join checkin c join place p 
where ucity='NewYork' and pcity='Chicago'

最多只允许创建两个索引结构,什么是最好的选择,为什么?

最佳答案

对于那个查询,在 ucity 上创建一个索引,在 pcity 上创建一个索引。

另外,如果您被允许创建最多 2 个索引,也许您还可以修改一个。如果是这种情况,请修改 CHECKIN 表上的主键,使其也包含 pid,紧跟在 uid 之后,因为很可能在不久的将来您将从 cross join 转换此查询在内部或左连接中

关于mysql - 应该创建什么索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36951470/

相关文章:

mysql - 将整数数组传递给 mysql 过程

java - 使用多线程时打开和关闭数据库连接

php - GROUP BY 不起作用

mysql - 在 laravel 5.0 中使用 FLUENT 的 datetime 列的日期值

jquery - 在 jqGrid 子网格中获取自定义 rowId

php - 使用php在目录中查找文件

mysql - INSERT/UPDATE 查询中的 Atomicity 多个 MySQL 子查询?

mysql - 在 Rails 中用数字和文本对字符串进行排序

python - Django-Cities-Light,在 postgresql 中将字段更改为foreignkey会引发错误

sql - 当我的 View 包含 UNION ALL 时,如何让 Oracle 使用索引?