mysql重点--正确使用
时间:2021-07-01 10:21:17
帮助过:51人阅读
- 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 = ‘seven@live.com‘;
7 特别的:当or条件中有未建立索引的列才失效,以下会走索引
8 select * from tb1 where nid = 1 or name = ‘seven‘;
9 select * from tb1 where nid = 1 or email = ‘seven@live.com‘ 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重点--正确使用
标签:div keyword mysq order by 处理 时间 整数 com 主键