关于sql server索引的建立假设我在表testtable上建立了非聚集索引create index ix_testtable_1 on testtab
关于sql server索引的建立 假设我在表testtable上建立了非聚集索引
create index ix_testtable_1 on testtable (medicalNUmber,name)
因为表单独使用这两个字段查 和组合查的频率都蛮高,表的数据大概有500W左右
我以后查询表 select * from testtable where name='test' 这样会使用到我的索引吗?
[解决办法] 好像不会,你看下查询计划就清楚了 [解决办法]
[解决办法] 建议采用dawugui的办法。 [解决办法] http://blog.csdn.net/arrow_gx/article/details/2469555 [解决办法] SQL SERVER 性能优化(强制使用索引查询)
情况1: 如果在 where 子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下面语句将进行全表扫描: select id from t where num=@num 可以改为强制查询使用索引: select id from t with(index(索引名)) where num=@num
情况2: 使用索引查询: select * from 表名(index =索引名) where 索引字段=50100 [解决办法] 你试试 select * from testtable with(index =ix_testtable_1) where name='test' [解决办法]
[解决办法] 你创建的这个索引,因为第一列不是name 所以查询语句 where name = XXX是用不上的 另 即使有索引 也不是一定会用 假如说你这个where条件的结果占整张表的80% 那显然sql server会自动选择全表扫描 所以也要考虑索引列的选择性