博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql索引、group by、explain、insert delayed
阅读量:6910 次
发布时间:2019-06-27

本文共 1999 字,大约阅读时间需要 6 分钟。

1、explain

将explain关键字加在sql语句前,将会列出详细的性能信息。
a、table:指明表名
b、type:连接类型,从最好到最差依次是:system,const,eq_ref,ref,range,index,ALL,possiable_key
c、key:显示mysql实际决定使用的键,如果没有索引被选择,将为null
d、key_len:mysql决定使用的键长度
f、ref:显示那个列或常熟与key一起从表中选择行
g、rows:执行查询的行数
rows<1000,是在可接受的范围内的。
rows在1000~1w之间,在密集访问时可能导致性能问题,但如果不是太频繁的访问(频率低于1分钟一次),又难再优化的话,可以接受,但需要注意观察
rows大于1万时,应慎重考虑SQL的设计,优化SQL,优化db,一般来说不允许频繁运行(频率低于1小时一次)。
rows达到10w级别时,坚决不能做为实时运行的SQL。但导数据场合除外,但导数据必须控制好时间,频度。
h、extra:如果是only index,则表明信息从索引树中检索得到。这要比扫描整个表快。如果包括文字,where userd,它意味着一个where子句将被用来限制那些行与下一个表匹配或发向客户。
通过相乘rows列输出的所有值,可以粗略确定mysql检验多少行以执行查询。
2、delayed
使用insert delayed into tablename values(...),可以延迟插入数据。
用delayed标示过的insert语句将被放入服务器的内存中,形成一个队列,等待插入。何时插入,取决于mysql是否有读行为,如果没有,将执行真正的插入。如果有,将被挂起。直到没有读行为,才插入。如果服务器崩溃或mysql被强行kill,等待插入的队列丢失。
3、procedure analyse()
使用procedure analyse(),将给出每个列最好的类型建议。
使用方式:select * from procedure analyse()
4、一些重要的参数:
delayed_queue_size:使用insert delayed来执行插入时,确定放入的数目
key_buffer_size:索引块的缓存区大小,如果内存够大,可以适当加大该值
back_log:客户机连接请求的数量
read_buffer_size:读操作用的缓存大小
write_buffer_size:写操作用的缓存大小
sort_buffer_size:排序用的缓存大小
5、索引
a、索引最好在myisam表上使用
b、一个复合索引最多包含16个列
c、确定一个列是否适合做索引,看select count(distinct  colname)/count(*) from table
如果该值接近0.31就适合做索引(当然越大越好),如果接近0则不适合做索引,也就是说该列没有太多的唯一值,而是有太多的重复值,这样将不适合做索引.

前缀索引不能用于order by和group by

d、对于索引使用列部分做索引,性能将得以优化
f、对于一个sql语句最适合做索引的是where部分和order by部分
h、全文索引:适合的字段类型为char、varchar、text
select title from table where match(title,contet) against('part');
需要注意part,长度如果小于4则停止搜索(当然可以更改此参数);part是以单词(单词分割为空格,逗号等)为单元来搜索,即如果1条记录中含有part,则part必须是个独立的单词,如depart则不能被搜索出来。
全文索引不能很好的支持中文。
如果每条记录都含有part,则没有结果被搜索出来(原因是频度必须小于50%)。
6、group by和having
group by以某列为条件分组
select count(*) from table group by cid;
having则选择符合条件的
select count(*) from table group by cid having count(*)>1000;
以cid分组,并选取每组记录总数大于1000的

7、使用optimize table tablename优化表

8.join

select * from A join B using(col1,col2);

等同于select * from A join B on A.col1=B.col1 and A.col2=B.col2

转载于:https://www.cnblogs.com/itfenqing/archive/2011/09/07/4429505.html

你可能感兴趣的文章
logstash配置
查看>>
什么样的数据分析工具才是营销人最想拥有的?
查看>>
cmp()
查看>>
Linux终端回话记录和回放工具 - asciinema使用总结
查看>>
《中國姓氏大全》【带拼音】
查看>>
关于司法行政管理系统
查看>>
Themida 1.8.X 脱壳之泡泡堂不死外挂3.16
查看>>
关于tClientDataSet
查看>>
send/sendto/sendmsg函数解析
查看>>
开源(Open Source)那些事儿 (一)
查看>>
我的Ajax之旅(一):不能加载'AjaxControlToolkit'。。。拒绝访问
查看>>
HDU 3791 二叉搜索树
查看>>
Standard Query Operators(2)
查看>>
Workbooks 对象的 Open 方法参数说明
查看>>
SQL递归查询(with cte as)
查看>>
DOM 元素 属性和方法
查看>>
Ant入门
查看>>
使用JavaScript 和 CSS 实现图像缩放和剪裁(转)
查看>>
Js Pattern - Self Define Function
查看>>
unigui下载文件
查看>>