sql优化的8种方式

时间:2021-08-20 20:03:27

1.设置索引。

MySQL索引操作:
给表列创建索引:

    • 建表时创建索引:

    • create table t(id int,name varchar(20),index idx_name (name));

    • 给表追加索引:

    • alter table t add unique index idx_id(id);

    • 给表的多列上追加索引

    • alter table t add index idx_id_name(id,name);
      或者:

    • create index idx_id_name on t(id,name);

    • 查看索引

      • 使用show语句查看t表上的索引:

      • show index from t;
        或者:

      • show keys from t;–mysql中索引也被称作keys 
        sql优化的8种方式

      • 使用show create table语句查看索引:

      • show create table t\G

      • sql优化的8种方式
        • 删除索引:

        • 使用alter table命令删除索引:

        • alter table 表 drop index 索引名

        • 使用drop index命令删除索引:

        • drop index 索引名 on 表

          • 索引原理:
            例如一个学生信息表,我们设置学号(stu_id)为索引:

            索引页之间存在一定的关联关系,一般为树形结构;分为根节点、分支节点、和叶子节点
            根节点页中存放分段stu_id的起始值,以及值所对应的分支索引页号
            分支索引页中存放分段stu_id的起始值,以及值所对应的叶子索引页号
            叶子索引页中存放排序后的stu_id值,该值所对应的表页号, 下一个叶子索引页的页号.

          • 2.使用EXPLAIN 来查看你的 SELECT 查询
          • 关于MySQL服务器是如何执行SQL语句的相关信息可以用explain语句来查看,可以用explain语句查看执行过程的语句主要有select、insert、update、delete等,其使用方式是explain后接具体的增删改查SQL语句。
            例如:explain select * from test.t; 其返回形式为数据表,如下图所示:
          • sql优化的8种方式

            其中每个字段代表的含义如下:

          • sql优化的8种方式
          • 三、不要使用表达式作为查询条件
          • 使用采用表达式的方式作为查询条件,条件列中的索引会失效,即便返回行数非常少,优化器也会使用低效的全表扫方式来解析SQL语句;如果同样效果的语句采用方式二的写法,索引不会失效,查询效率高。

            发生这种事情的深层原因在于:
            大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了。但是当使用表达式的时候,就会不使用缓存,因为这些函数的返回是会不定的易变的

          • 四、尽量使用in运行符来替代or运算
          • 比较以下两种SQL语句书写方式,比较运行时间:
            方式一:select * from t where id=1 or id=2 or id=3;
            方式二:select * from t where id in (1,2,3);

            由于t表id列已添加索引,可以使用MySQL自带压力测试工具mysqlslap,增加并发用户数量和查询次数比较两种方式的运行效率。

            mysqlslap命令常用选项如下所示:
            -u:连接数据库用户名
            -p:链接数据库密码
            -concurrency:并发谅解客户端数量
            -query:运行的测试SQL语句
            -create-schema:测试SQL语句所在数据库
            -number-of-queries:所有链接客户端运行测试SQL语句的次数
            -itreations:本次测试的重复执行次数
            将方式一和方式二的SQL语句,使用mysqlslap进行测试,采用100个并发客户端,所有客户端一共运行5000次,可以写成以下方式:

            方式一:
            mysqlslap -uroot -p --create-schrma=test --query=‘select * from t where id=1 or id=2 or id=3’ --concurrency=100 --number-of-queries=5000

            方式二:
            mysqlslap -uroot -p --create-schema=test --query=‘select * from t where id in (1,2,3)’ --concurrency=100 --number-of-queries=5000

            测试结果如下:
            sql优化的8种方式

            从实验结果可以看出,SQL语句采用方式一的or方式50个并发用户执行5000次查询所用的时间为1.09秒;SQL语句采用方式二的in方式50个并发用户执行5000次查询所用的时间为0.93秒,在写法等效的情况下,使用IN来替代OR效率更高。