我有一个表(几百万到一千万)其中有五个字段是作为查询条件的
create_time DATE 时间随记录创建时产生
log_sort SI 种类大概就几十种
org_id I 单位号根据用户创建单位数而定,应该两位数以内
file_id VA(50) 文件号不定,根据用户使用情况增长
user_id I 用户id,应该3位数以内
....
....
请问我应该怎样建立索引,来优化查询速度。我想建立多列索引,但是根据用户的选择字段的匹配不定。
所以不知道该怎么建。
例如 建了(user_id,org_id,log_sort)后,只适合
user_id
user_id,org_id
user_id,org_id,log_sort的查询,其他情况索引不起作用。而且建立索引后,定位少量结果集的速度是提高很多,但是当返回大量结果集的时候就不是那么快了~这是为什么?而不建立索引的时候,返回大量结果集(几十万)时又很快。
希望有经验的前辈能提些意见!谢谢~
create_time DATE 时间随记录创建时产生
log_sort SI 种类大概就几十种
org_id I 单位号根据用户创建单位数而定,应该两位数以内
file_id VA(50) 文件号不定,根据用户使用情况增长
user_id I 用户id,应该3位数以内
....
....
请问我应该怎样建立索引,来优化查询速度。我想建立多列索引,但是根据用户的选择字段的匹配不定。
所以不知道该怎么建。
例如 建了(user_id,org_id,log_sort)后,只适合
user_id
user_id,org_id
user_id,org_id,log_sort的查询,其他情况索引不起作用。而且建立索引后,定位少量结果集的速度是提高很多,但是当返回大量结果集的时候就不是那么快了~这是为什么?而不建立索引的时候,返回大量结果集(几十万)时又很快。
希望有经验的前辈能提些意见!谢谢~
我感觉这样应该不太好吧~
定位少量结果集的速度是提高很多,但是当返回大量结果集的时候就不是那么快了-----这个问题已经说过了,不是你建立了索引,数据库就一定会使用,返回的结果如果大的话,就会进行全表扫描,这个时候不建立索引会比较快。
userid+sort_id的查询很慢~包括org_id+其他的比较慢~因为没有走索引嘛~~~我是不是再建一个org相关的索引的呢?然后根据查询条件的不同走不通的sql
用explain察看sql的执行计划。