(1)查询的sql语句写的烂
(2)索引失效(单值索引、复合索引)
(3)关联查询太多join(即关联了太多的表,设计缺陷或需求需要)
(4)服务器调优及各个参数设置(缓冲、线程数等)
(1)Mysql执行sql语句顺序
SELECT 6
*|{[DISTINCT] column|expression [alias],...} 7
FROM table1 1
inner join table2 on join_condition 2
[WHERE condition(s)] 3
[GROUP BY column|group_by_expression] 4
[HAVING group_condition] 5
[ORDER BY column1,column2... asc|desc] 8
limit start,size 10
(2)七种常见的join查询
1、什么是索引
Mysql官方定义索引为:索引是帮助mysql高效获取数据的数据结构,其本质为》索引是排好序的快速查找数据结构。在mysql数据库中,索引也是一张表,该表中存储着索引的值和这个值的数据所在行的物理地址,使用索引后可以不用扫描全表来定位某行的数据,而是通过索引表来找到该行数据对应的物理地址,再根据该物理地址快速定位到该行数据。
在该表中,存在索引的情况下,新增、修改或删除时,该涉及到数据的物理地址(索引值)更改,对该数据按照一定的规则排列组合,形成新的数据结构,则增、修、改时,操作慢,根据特定算法查询快,所以说,并非索引越多越好。
2、索引的优缺点
优点:
(1)提高数据检索的效率,降低数据库的IO成本
(2)通过索引列对数据进行排序,降低数据排序的成本,降低了CPU的消耗
缺点:
(1)索引也是一张表,保存着该数据的物理地址、索引值等信息,也要占用空间(磁盘空间)
(2)降低更新表的速度,如对表进行insert、update或delete操作。因为更新表时,mysql不仅保存数据,还要保存、修改索引信息,调整数据的排序位置
3、索引的分类
(1)单值索引:一个索引只包含单个列,但一个表中可以有多个单列索引(如:唯一索引、主键索引等)。
(2)组合索引:即一个索引包含多个列
创建索引:
create index index_name on table_name (column1(length),column2(length)...)
修改索引:
alter table table_name add index index_name on (column1(length),column2(length)...)
删除索引:
drop index index_name on table_name
查看索引:
show index from table_name
4、索引的结构(存储引擎实现)
(1)B-Tree索引:在MyISAM和InnoDB存储引擎中的实现不同,默认索引
(2)Hash索引:Mermory默认使用的是hash索引
(3)full-text全文索引
(4)R-Tree索引
5、哪些情况下适合创建索引
(1)主键自动建立唯一索引
(2)频繁做为查询条件的字段应该创建索引
(3)查询中与其他表关联的字段,外键关系建立索引
(4)频繁更新的字段不适合创建索引
(5)where条件用不到的字段不创建索引
(6)单键/组合索引的选择(在高并发下倾向创建组合索引)
(7)查询中排序的字段,排序的字段若通过索引去访问将大大提高排序速度
(8)查询中统计或分组的字段
6、哪些情况不适合创建索引
(1)表记录太少
(2)经常增删改的表:因为提高了查询的速度,同时却会降低更新表的速度,如对表进行insert、update或delete时,mysql不仅要保存数据,还要保存索引文件等信息
(3)数据重复且分布平均的表字段,因为某个数据包含许多重复的内容,为它建立索引就没有太大的实际效果·