如何为我的表创建索引?
我有一个表格,格式如下。而且我也知道它最常用的sql,所以我的问题是如何在我的表上创建索引,从而使这个sql查询可以获得最佳性能。顺便说一句,我的数据库是 sybase ASE 12.5。
药片: bu,名称,日期,score_a,score_b
SQL:
SELECT bu, name, max(score_a), max(score_b)
FROM
t
WHERE date > '20110101' AND date < '20110901'
GROUP BY bu, name
感谢您的任何建议。
I have a table with format below. And I also know the most common used sql on it, so my question is how to create index on my table thus this sql query can have best performance. Btw, my db is sybase ASE 12.5.
Table t:
bu, name, date, score_a, score_b
SQL:
SELECT bu, name, max(score_a), max(score_b)
FROM
t
WHERE date > '20110101' AND date < '20110901'
GROUP BY bu, name
Thanks for any suggestions.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
基本上,您需要向 WHERE 和 GROUP BY 子句使用的字段添加索引,因此我会使用 code、bu 和 name。如何创建索引:
<代码>
CREATE INDEX 索引名称 ON 表名称(列名称);
对于您的情况:
<代码>
创建索引 idate ON t(日期);
Basically you need to add indexes to fields used by WHERE and GROUP BY clause, so I'd go with code, bu and name. How to create an index:
CREATE INDEX index_name ON table_name (column_name);
In your case:
CREATE INDEX idate ON t (date);
Matino 建议的日期索引将确保 Sybase 只命中对结果有贡献的行。
由于每行的所有字段都在查询中使用,因此任何其他索引都无济于事。
进一步加快查询速度的唯一方法是将所有列包含在日期索引中。但这通常太过分了!
The index on Date suggested by Matino will make sure Sybase only hit rows contributing to the result.
As all fields from each row is used in the query, any other indexes won't help.
The only way to speed up the query some more would be to include all columns in the date index. But that would normally be overkill!