这个问题太涉及到的方面太多了 总的思路:考虑在where、order by、group by 后面涉及到的列上建立索引,有时复合索引(多列组合成索引)可能比单列索引效果更好,尽量在一些列长度比较短的列上建立索引,在一些并发性很强、数据量很大的表上尽量避免在一些序列性很强的列上建立索引,建立索引的同时还要考虑维护索引的代价(这个在大并发、大数据量系统里更要仔细考虑),大概就先想到这些吧。
一般where 后面的字段设置索引 初学者 mysql myisam支持btree 不支持fulltextmemory支持rtree
总的思路:考虑在where、order by、group by 后面涉及到的列上建立索引,有时复合索引(多列组合成索引)可能比单列索引效果更好,尽量在一些列长度比较短的列上建立索引,在一些并发性很强、数据量很大的表上尽量避免在一些序列性很强的列上建立索引,建立索引的同时还要考虑维护索引的代价(这个在大并发、大数据量系统里更要仔细考虑),大概就先想到这些吧。
mysql myisam支持btree 不支持fulltextmemory支持rtree
存储引擎 允许的索引类型
MyISAM BTREE
InnoDB BTREE
MEMORY/HEAP HASH, BTREE
一般是根据你常用的查询来建议索引。
原则上是表中必须有主键。
然后根据你的SELECT / UPDATE / DELETE where .... 后的条件建立索引。关于这个,几句话很难讲清楚,建议你看完下面的这些内容后再进行讨论。http://dev.mysql.com/doc/refman/5.1/zh/optimization.html#query-speed
7.2. 优化SELECT语句和其它查询
7.2.1. EXPLAIN语法(获取SELECT相关信息)
7.2.2. 估计查询性能
7.2.3. SELECT查询的速度
7.2.4. MySQL怎样优化WHERE子句
7.2.5. 范围优化
7.2.6. 索引合并优化
7.2.7. MySQL如何优化IS NULL
7.2.8. MySQL如何优化DISTINCT
7.2.9. MySQL如何优化LEFT JOIN和RIGHT JOIN
7.2.10. MySQL如何优化嵌套Join
7.2.11. MySQL如何简化外部联合
7.2.12. MySQL如何优化ORDER BY
7.2.13. MySQL如何优化GROUP BY
7.2.14. MySQL如何优化LIMIT
7.2.15. 如何避免表扫描
7.2.16. INSERT语句的速度
7.2.17. UPDATE语句的速度
7.2.18. DELETE语句的速度
7.2.19. 其它优化技巧