mysql----其他小技巧

小技巧:

min/max优化 在表中,一般都是经过优化的. 如下地区表


id


area


pid


1


中国


0


2


北京


1


...


3115


3113

我们查min(id), id是主键,查Min(id)非常快.

但是,pid上没有索引, 现在要求查询3113地区的min(id);

select  min(id)  from  it_area  where  pid=3113;//全表扫描,找出所有pid=3113的,然后求出最小的id。

试想 id是有顺序的,(默认索引是升续排列), 因此,如果我们沿着id的索引方向走,

那么  第1个 pid=3113的索引结点,他的id就正好是最小的id,强制使用主键索引。

select  id  from it_area use index(primary) where pid=3113 limit 1;  //查询出来的结果是有序的,因为索引是有序的,而又沿着索引找,扫描到了之后取一行就可以了。

|       12 | 0.00128100 | select min(id) from it_area where pid=69                         |

|       13 | 0.00017000 | select id from it_area  use index(primary) where pid=69  limit 1 |

改进后的速度虽然快,但语义已经非常不清晰,不建议这么做,仅仅是实验目的.

count() 优化

误区:

1:myisam的count()非常快

答: 是比较快,.但仅限于查询表的”所有行”比较快, 因为Myisam对总行数进行了存储.一旦有条件的查询, 速度就不再快了.尤其是where条件的列上没有索引.

2: 假如,id<100的商家都是我们内部测试的,我们想查查真实的商家有多少?

select count(*) from lx_com where id>=100;  (1000多万行用了6.X秒,就不快了)

小技巧:

select count(*) from lx_com; 快

select count(*) from lx_com where id<100; 快

select count(*) frol lx_com -select count(*) from lx_com where id<100; 快

select (select count(*) from emp) - (select count(*) from emp where empno<100)

3: group by

注意:

1:分组用于统计,而不用于筛选数据.

比如: 统计平均分,最高分,适合, 但用于筛选重复数据,则不适合.

以及用索引来避免临时表和文件排序

2:  以A,B表连接为例 ,主要查询A表的列,

那么 group by ,order by 的列尽量相同,而且列应该显示声明为A的列

4: union优化

注意: union all 不过滤 效率提高,如非必须,请用union all

因为 union去重的代价非常高, 放在程序里去重.

原文地址:https://www.cnblogs.com/yaowen/p/8297637.html

时间: 2025-01-18 03:51:00

mysql----其他小技巧的相关文章

MySQL安全小技巧

MySQL安全小技巧,后面会慢慢补充. mysql命令行有个参数 -U, --safe-updates  Only allow UPDATE and DELETE that uses keys. 表示安全的更新,就是说delete或者update数据的时候,必须加上条件,不然就报错.如下图: 我们可以做个别名 echo 'alias mysql="mysql -U"' >> /etc/profile source /etc/profile 这样的话,其他用户登录mysql,

mysql优化小技巧

对mysql优化时一个综合性的技术,主要包括 a: 表的设计合理化(符合3NF) b: 添加适当索引(index) [四种: 普通索引.主键索引.唯一索引unique.全文索引] c: 分表技术(水平分割.垂直分割) d: 读写[写: update/delete/add]分离 e: 存储过程 [模块化编程,可以提高速度] f: 对mysql配置优化 [配置最大并发数my.ini, 调整缓存大小 ] g: mysql服务器硬件升级 h: 定时的去清除不需要的数据,定时进行碎片整理(MyISAM)

带你了解MySQL数据库小技巧

兴趣是最好的老师,不论学习什么知识,兴趣都可以极大地提高学习效率.当然学习MySQL 5.6也不例外.本文列举37 个 MySQL 数据库小技巧,快来学习吧! 37 个 MySQL 数据库小技巧! 1.如何快速掌握MySQL? 培养兴趣 兴趣是最好的老师,不论学习什么知识,兴趣都可以极大地提高学习效率.当然学习MySQL 5.6也不例外. 夯实基础 计算机领域的技术非常强调基础,刚开始学习可能还认识不到这一点,随着技术应用的深 入,只有有着扎实的基础功底,才能在技术的道路上走得更快.更远.对于M

mysql使用小技巧

1.MySQL中有许多很实用的函数,好好利用它们可以省去很多时间: group_concat() 将取到的值用逗号连接,可以这么用: select group_concat(distinct id) from tablename; 得到的结果类似为: 1,2,3,4,5 unix_timestamp(), to_days(), now() 这三个函数都是与日期相关的函数,主要用于处理mysql中timestamp类似的数据,可以用于与unix时间戳转换以及比较 select now(), uni

MySql实用小技巧

1:将txt中的数据导入数据库表中,命令: load data local infile 'D:\\文件名.txt' into table 表名 fields terminated by '\t'; 2:插入数据后查询显示乱码,解决方案: set character set_results=utf-8; 3:多表多外键数据查询 select * from userinfo,usertype,usercert where userinfo.certid=usercert.certid and us

mysql维护管理的几点小技巧(自我总结)

一.mysql数据库用户密码修改方法 (1).在知道mysql数据库root用户密码条件下修改root用户密码wxsemico方法一:[[email protected] ~]# mysql -u root -pEnter password: 输入root密码mysql> show databases;mysql> use mysql;mysql> update user set password=password('wxsemico') where user='root';mysql&

mysql写Shell小技巧

今天终于在表哥的帮助下解决了文件导入/出这个问题了.(很菜逼的一个问题),然后将最近看到的文章都自己测试了下,顺便奉上记录.1.Mysql数据库支持union的时候写文件小技巧: 采用常规的union写入,可以看到前面的字段占位数肯定也会被写入,替换成null也是一样的结果,这个对于写shell没啥大碍,但是如果用来写bat,mof,vbs等文件就会出问题了,那么怎么去掉这个只写入我们需要的内容呢?采用hex编码就好了. 将我们要写入的内容使用hex编码在分段写在每个字段位上,这样就可以只写入我

10个提升MySQL百家乐性能baijiale的小技巧

从工作量分析到索引的三条规则,这些专家见解肯定会让您的MySQL服务器尖叫. 在所有的关系数据库中,MySQL已经被证明了完全是一头野兽,只要通知停止运行就绝对不会让你多等一秒钟,使你的应用置于困境之中,你的工作也承受极大的风险. 不过事实是,普通的错误都在MySQL性能错误的射程之内.所以为了使你的MySQL服务器能够高速运转,提供稳定且持续的服务,消除这些错误是非常有必要的,但是这可能常常会被你的繁忙工作或配置陷阱微妙地遮蔽了. 幸运的是,许多MySQL性能问题其实都有相似的解决办法,发现并

忘记mysql root 密码修改小技巧

首先我说一下我的情况,我并不是忘记了我的root密码,只不过是我在使用phpmyadmin的时候更改密码的时候选择了如图1 的这个方法将密码加密并更改了,然后就再次登录的时候登录不上,所以对于菜鸟级的用户学习mysql来说我推荐我的这个方法. 网上搜索相关的帖子的整体思路都是关闭mysql的进程然后跳过权限设置最后重新设定密码,不过我不是很清楚是不是mysql新版本的问题,mysql根目录/bin下没有mysqld-nt.exe导致很多帖子的相关命令都失效,对于菜鸟又不知道该对应哪些地方才行.于

mysql不能启动问题分析的一个小技巧

场景:在迁移mysql5.5.25a数据目录(从/var/lib/mysql迁移至/data)后,无法启动数据库,执行service mysql start,提示pid无法更新,新旧数据目录下的错误日志均无任何信息.此时,没有太多mysql使用经验的同事估计已经傻眼了. 类似问题如何排查呢? 这里有个小技巧: 可以稍微改下/etc/init.d/mysql(先备份),里面的      $bindir/mysqld_safe --datadir="$datadir" --pid-file