mysql重点--正确使用
Posted gege4105
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql重点--正确使用相关的知识,希望对你有一定的参考价值。
1.一些错误情况
数据库表中添加索引后确实会让查询速度起飞,但前提必须是正确的使用索引来查询,如果以错误的方式使用,则即使建立索引也会不奏效。
即使建立索引,索引也不会生效:
1 - like ‘%xx‘ 2 select * from tb1 where name like ‘%cn‘; 3 - 使用函数 4 select * from tb1 where reverse(name) = ‘wupeiqi‘; 5 - or 6 select * from tb1 where nid = 1 or email = ‘[email protected]‘; 7 特别的:当or条件中有未建立索引的列才失效,以下会走索引 8 select * from tb1 where nid = 1 or name = ‘seven‘; 9 select * from tb1 where nid = 1 or email = ‘[email protected]‘ and name = ‘alex‘ 10 - 类型不一致 11 如果列是字符串类型,传入条件是必须用引号引起来,不然... 12 select * from tb1 where name = 999; 13 - != 14 select * from tb1 where name != ‘alex‘ 15 特别的:如果是主键,则还是会走索引 16 select * from tb1 where nid != 123 17 - > 18 select * from tb1 where name > ‘alex‘ 19 特别的:如果是主键或索引是整数类型,则还是会走索引 20 select * from tb1 where nid > 123 21 select * from tb1 where num > 123 22 - order by 23 select email from tb1 order by name desc; 24 当根据索引排序时候,选择的映射如果不是索引,则不走索引 25 特别的:如果对主键排序,则还是走索引: 26 select * from tb1 order by nid desc; 27 28 - 组合索引最左前缀 29 如果组合索引为:(name,email) 30 name and email -- 使用索引 31 name -- 使用索引 32 email -- 不使用索引
2.其他注意事项
- 避免使用
select
*
-
count
(1)或
count
(列) 代替
count
(*)
- 创建表时尽量时
char
代替
varchar
- 表的字段顺序固定长度的字段优先
- 组合索引代替多个单列索引(经常使用多个条件查询时)
- 尽量使用短索引
- 使用连接(
JOIN
)来代替子查询(Sub-Queries)
- 连表时注意条件类型需一致
- 索引散列值(重复少)不适合建索引,例:性别不适合
3.limit分页
这里只做简单表述。在使用
select sth from table_name limit 0,10;
过程中发现当数据量大的时候。比如limit 24322,10需要ALL遍历到两万条后才会拿到
所需要的数据。需要的时间非常长,优化为:
select * from bigdata where nid > 3000 limit 3000,10;
这样会进行range查询。速度非常快,所做的仅仅是记录下上次查询过的nid就行。
同样在直接输入页数比如客户输入4989,怎么样处理?
利用B-tree数组来先粗略定位页数也许可行。
以上是关于mysql重点--正确使用的主要内容,如果未能解决你的问题,请参考以下文章