看过很多索引的文章 当具体还是有些不明白比如 TABLE ID NAME AGE SEX TEACHERID GRADE DATE 1 A 17 男 12 高三 2008-02-23 2 B 17 男 11 高二 2008-04-23 3 C 16 男 13 高一 2008-02-21 4 D 16 男 12 高三 2008-05-23 要统计的有 所有高三的学生 所有入学DATE 所有老师的学生 如何建索引比较好
比如这个例子 AGE 可能有10多项不同值 GRADE 只有3项不同值 DATE是每天都有 TEACHEERID 是30多项 用到的有 SELECT COUNT(*) FROM TEST WHERE GRADE = ‘高三 SELECT COUNT(*) FROM TEST WHERE GRADE = ‘高三’AND DATE = '2008-02-23 ' SELECT COUNT(*) FROM TEST WHERE TEACHERID = '12' AND GRADE = '高三' 等等
如果 字段里多是重复的值,比如高一/高二/高三,男/女等,据说 为此建立一个索引没什么意义, 另外,联合索引通常,查询条件主要为这些字段的联合查询 where DATE='2008-02-23' and AGE>11,这样联合索引有效 或者,单独条件为联合索引的第一项,比如第一项为DATE where DATE='2008-02-23' 有效 where AGE>11 无效 那么如果有可能,用EXPLAIN SELECT 每一种查询都看看 如果这样太恐怖了,我的查询条件是不可预计的,就 1。联合查询占了30%以上,那么为此做联合索引 2。除去联合索引的第一项,其他项,如果单独查询30%以上,再为此做单独索引
当具体还是有些不明白比如
TABLE
ID NAME AGE SEX TEACHERID GRADE DATE
1 A 17 男 12 高三 2008-02-23
2 B 17 男 11 高二 2008-04-23
3 C 16 男 13 高一 2008-02-21
4 D 16 男 12 高三 2008-05-23
要统计的有 所有高三的学生 所有入学DATE 所有老师的学生
如何建索引比较好
you84.com 公交搜索网 -- 坐公车,巴士一下,你就知道 ;提供全国400多个城市的公交搜索,让你在最短的时间找到最佳的乘车方案.
即便被索引的内容不够简化,查询的时候,使用索引比不用要好,当前TEACHERID GRADE DATE 联合索引,也不错
看看当前查询,使用到了哪些索引 ,索引的是否合适,用 EXPLAIN SELECT 代替 select,查询看看
另外,索引会减慢一点数据修改时的速度,每修改数据,索引会刷新一次,所以也不会有人把所有子段都索引上
此外,如果where有!= 不等号,将不会使用索引。字段被函数包裹:substr(A字段),也不会使用索引。LIKE的时候,如果%test%不会使用索引,test%会使用
AGE 可能有10多项不同值 GRADE 只有3项不同值 DATE是每天都有 TEACHEERID 是30多项
用到的有
SELECT COUNT(*) FROM TEST WHERE GRADE = ‘高三
SELECT COUNT(*) FROM TEST WHERE GRADE = ‘高三’AND DATE = '2008-02-23 '
SELECT COUNT(*) FROM TEST WHERE TEACHERID = '12' AND GRADE = '高三'
等等
另外,联合索引通常,查询条件主要为这些字段的联合查询
where DATE='2008-02-23' and AGE>11,这样联合索引有效
或者,单独条件为联合索引的第一项,比如第一项为DATE
where DATE='2008-02-23' 有效
where AGE>11 无效
那么如果有可能,用EXPLAIN SELECT 每一种查询都看看
如果这样太恐怖了,我的查询条件是不可预计的,就
1。联合查询占了30%以上,那么为此做联合索引
2。除去联合索引的第一项,其他项,如果单独查询30%以上,再为此做单独索引
b+树是b树的一种变种,搞清楚了上面的问题就不难了解释了.
b+树上的索引结点可采用二分查找,效率o(logn),
而无索引的查找的时间复杂度是o(n),(我是指查找一条记录的效率),
由此可对比得出.稍微补充一下,为啥要用B+树就是为了解决内存中不能载入全部数据的时候用来分级载入数据,
这样可以充分利用内存的换入换出来解决海量数据操作的问题,
(海量数据,没处理过,,,网上找的,b树和b+树都是二分查找)