mysql优化无索引查询:SQL>CREATE TABLE test_tab (id INT,name VARCHAR(10),age INT,val VARCHAR(10)。
1、对查询进行优化,应尽量避免全表扫描,首先应考虑在where及order by涉及的列上建立索引。
2、应尽量避免在 where子句中使用!=或<> *** 作符,否则将引擎放弃使用索引而进行全表扫描。
3、应尽量避免在 where子句中对字段进行null值判断,否则将导致引擎放弃使用索引而进行全表扫描。
运行mysql安装文件:
按 Next,然后选择安装方式,有 "Typical(默认)"、"Complete(完全)"、"Custom(用户自定义)",选择第二个选项 "Custom",下一步, MySQL Server (mysql服务器), Developer Components (开发者部分), Debug Symbols (调试符号), Server data files (服务器数据文件) 默认。
改变安装路径;原路径是"C:\Program Files\MySQL\MySQL Server 5.5\",也可以修改为:"E:\Program Files\MySQL Server 5.5\"。
假如你有一个表,SQL>
CREATE
TABLE
test_tab
(2
id
INT,
3
name
VARCHAR(10),
4
age
INT,
5
val
VARCHAR(10)6
)你的业务,有一个查询,是
SELECT
*
FROM
test_tab
WHERE
name
=
一个外部输入的数据
刚开始,数据不多的时候,执行效果还不错。
随着数据量的增加,这个查询,执行起来,越来越慢了。
然后在
name
上面
建立了索引
CREATE
INDEX
idx_test4_name
ON
test_tab
(name
)
这样,
可以加快前面那个查询的速度。
但是,某天,你执行了下面这个SQL,
发现速度又慢了
SELECT
*
FROM
test_tab
WHERE
age
=
25
为啥呢?
因为
age
字段上面,没有索引
索引只在
name
上面有
换句话说,
也就是
WHERE
里面的条件,
会自动判断,有没有
可用的索引,如果有,
该不该用。
多列索引,就是一个索引,包含了2个字段。
例如:CREATE
INDEX
idx_test_name_age
ON
test_tab
(name,
age)那么SELECT
*
FROM
test_tabWHEREname
LIKE
'张%'
AND
age
=
25
这样的查询,将能够使用上面的索引。
多列索引,还有一个可用的情况就是,
某些情况下,可能查询,只访问索引就足够了,
不需要再访问表了。例如:SELECTAVG(
avg
)
AS
平均年龄FROMtest_tabWHEREname
LIKE
'张%'
这个时候,
name
与
age
都包含在索引里面。
查询不需要去检索表中的数据。
mysql查询in为什么用不上索引mysql查询in用不上索引,说明查询语句本身有问题。 MySQL是查询语句,最好用Access 2010来 *** 作。 查询是用来 *** 作数据库中的记录对象,利用它可以按照预先定义的不同条件从数据表或其它查询中筛选出需要 *** 作的字段,并可以把它们集中起来
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)