Day46:数据库引擎、索引、pymysql

一、数据库存储引擎

1、存储引擎

mysql中建立的库===>文件夹

库中建立的表===>文件

现实生活中我们用来存储数据的文件应该有不同的类型:比如存文本用txt类型,存表格用excel,存图片用png等。

数据库中的表也应该有不同的类型,表的类型不同,会对应mysql不同的存取机制,表类型又称为存储引擎。

存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方
法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和
操作此表的类型)。

在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。而MySql
数据库提供了多种存储引擎。用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据
自己的需要编写自己的存储引擎。

2、mysql支持的存储引擎

mysql> show engines\G;  #查看所有支持的存储引擎
mysql> show variables like ‘%storage_engine%‘;   #查看正在使用的存储引擎

MySQL常用的存储引擎

MyISAM存储引擎
由于该存储引擎不支持事务、也不支持外键,所以访问速度较快。因此当对事务完整性没有要求并以访问为主的应用适合使用该存储引擎。

InnoDB存储引擎(主要使用
由于该存储引擎在事务上具有优势,即支持具有提交、回滚及崩溃恢复能力等事务特性,所以比MyISAM存储引擎占用更多的磁盘空间。因此当需要频繁的更新、删除操作,同时还对事务的完整性要求较高,需要实现并发控制,建议选择。

MEMORY
MEMORY存储引擎存储数据的位置是内存,因此访问速度最快,但是安全上没有保障。适合于需要快速的访问或临时表。

BLACKHOLE
黑洞存储引擎,可以应用于主备复制中的分发主库。

3、使用存储引擎

方法1:建表时指定

mysql> create table innodb_t1(id int,name char)engine=innodb;
mysql> create table innodb_t2(id int)engine=innodb;
mysql> show create table innodb_t1;
mysql> show create table innodb_t2;

方法2:在配置文件中指定默认的存储引擎

/etc/my.cnf
[mysqld]
default-storage-engine=INNODB
innodb_file_per_table=1

查看

[[email protected] db1]# cd /var/lib/mysql/db1/
[[email protected] db1]# ls
db.opt  innodb_t1.frm  innodb_t1.ibd  innodb_t2.frm  innodb_t2.ibd

二、索引

1、索引简介

索引在MySQL中也叫做“键”,是存储引擎用于快速找到记录的一种数据结构。索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要。

索引优化应该是对查询性能优化最有效的手段了。
索引能够轻易将查询性能提高好几个数量级。
索引相当于字典的音序表,如果要查某个字,如果不使用音序表,则需要从几百页中逐页去查。

索引特点:创建与维护索引会消耗很多时间与磁盘空间,但查询速度大大提高!

2、索引语法

创建索引

--创建表时
--语法:
    CREATE TABLE 表名 (
                字段名1  数据类型 [完整性约束条件…],
                字段名2  数据类型 [完整性约束条件…],
                [UNIQUE]   INDEX | KEY
                [索引名]  (字段名[(长度)]  [ASC |DESC])
                );

--------------------------------
--创建普通索引示例:

    CREATE TABLE emp1 (
        id INT,
        name VARCHAR(30) ,
        resume VARCHAR(50),
        INDEX index_emp_name (name)
    --KEY index_dept_name (dept_name)
        );

--创建唯一索引示例:

    CREATE TABLE emp2 (
        id INT,
        name VARCHAR(30) ,
        bank_num CHAR(18) UNIQUE ,
        resume VARCHAR(50),
        UNIQUE INDEX index_emp_name (name)
        );

--创建全文索引示例:

    CREATE TABLE emp3 (
        id INT,
        name VARCHAR(30) ,
        resume VARCHAR(50),
        FULLTEXT INDEX index_resume (resume)
        );

--创建多列索引示例:

    CREATE TABLE emp4 (
        id INT,
        name VARCHAR(30) ,
        resume VARCHAR(50),
        INDEX index_name_resume (name,resume)
        );
---------------------------------

添加和删除索引

---添加索引

    ---CREATE在已存在的表上创建索引
      CREATE  [UNIQUE]  INDEX  索引名
              ON 表名 (字段名[(长度)]  [ASC |DESC]) ;

    ---ALTER TABLE在已存在的表上创建索引

      ALTER TABLE 表名 ADD  [UNIQUE] INDEX
                    索引名 (字段名[(长度)]  [ASC |DESC]) ;

      CREATE INDEX index_emp_name on emp1(name);
      ALTER TABLE emp2 ADD UNIQUE INDEX index_bank_num(band_num);

-- 删除索引

    语法:DROP INDEX 索引名 on 表名

    DROP INDEX index_emp_name on emp1;
    DROP INDEX bank_num on emp2;

3、索引测试实验

--创建表
create table Indexdb.t1(id int,name varchar(20));

--存储过程

delimiter $$
create procedure autoinsert()
BEGIN
declare i int default 1;
while(i<500000)do
insert into Indexdb.t1 values(i,‘yuan‘);
set i=i+1;
end while;
END$$

delimiter ;

--调用函数
call autoinsert();

-- 花费时间比较:
-- 创建索引前
   select * from Indexdb.t1 where id=300000;--2.42s
-- 添加索引
   create index index_id on Indexdb.t1(id);
-- 创建索引后
   select * from Indexdb.t1 where id=300000;--0.09s

三、pymysql

pymysql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同。

一、下载安装:

pip3 install pymysql

二、使用

1、执行SQL

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import pymysql

# 创建连接
conn = pymysql.connect(host=‘127.0.0.1‘, port=3306, user=‘root‘, passwd=‘123‘, db=‘t1‘)
# 创建游标
cursor = conn.cursor()

# 执行SQL,并返回收影响行数
effect_row = cursor.execute("update hosts set host = ‘1.1.1.2‘")

# 执行SQL,并返回受影响行数
#effect_row = cursor.execute("update hosts set host = ‘1.1.1.2‘ where nid > %s", (1,))

# 执行SQL,并返回受影响行数
#effect_row = cursor.executemany("insert into hosts(host,color_id)values(%s,%s)", [("1.1.1.11",1),("1.1.1.11",2)])

# 提交,不然无法保存新建或者修改的数据
conn.commit()

# 关闭游标
cursor.close()
# 关闭连接
conn.close()

2、获取新创建数据自增ID

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import pymysql

conn = pymysql.connect(host=‘127.0.0.1‘, port=3306, user=‘root‘, passwd=‘123‘, db=‘t1‘)
cursor = conn.cursor()
cursor.executemany("insert into hosts(host,color_id)values(%s,%s)", [("1.1.1.11",1),("1.1.1.11",2)])
conn.commit()
cursor.close()
conn.close()

# 获取最新自增ID
new_id = cursor.lastrowid

3、获取查询数据

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import pymysql

conn = pymysql.connect(host=‘127.0.0.1‘, port=3306, user=‘root‘, passwd=‘123‘, db=‘t1‘)
cursor = conn.cursor()
cursor.execute("select * from hosts")

# 获取第一行数据
row_1 = cursor.fetchone()

# 获取前n行数据
# row_2 = cursor.fetchmany(3)
# 获取所有数据
# row_3 = cursor.fetchall()

conn.commit()
cursor.close()
conn.close()

注:在fetch数据时按照顺序进行,可以使用cursor.scroll(num,mode)来移动游标位置,如:

  • cursor.scroll(1,mode=‘relative‘)  # 相对当前位置移动
  • cursor.scroll(2,mode=‘absolute‘) # 相对绝对位置移动

4、fetch数据类型

  关于默认获取的数据是元祖类型,如果想要或者字典类型的数据,即:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import pymysql

conn = pymysql.connect(host=‘127.0.0.1‘, port=3306, user=‘root‘, passwd=‘123‘, db=‘t1‘)

# 游标设置为字典类型
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
r = cursor.execute("call p1()")

result = cursor.fetchone()

conn.commit()
cursor.close()
conn.close()

时间: 2024-12-19 14:25:17

Day46:数据库引擎、索引、pymysql的相关文章

pymysql操作数据库与索引

目录 pymysql操作数据库 简单操作 sql的注入问题 sql注入问题解决办法 sql注入问题模板总结 利用pymysql操作数据库 (增删改),conn.commit() 索引 1.为何要有索引 2.什么是索引? 3.索引使用的优缺点 4.索引原理 5.索引的种类 索引的创建 主键索引 唯一索引 普通索引 pymysql操作数据库 简单操作 import pymysql # pip install pymysql # 连接数据库的参数 conn = pymysql.connect(host

SQL Server 索引优化-----数据库引擎优化顾问

本文将根据“数据库引擎优化顾问”(DTA)来发现无用或缺失的索引. 要使用“数据库引擎优化顾问”,首先需要对数据库负载进行监控,为数据库负载分析准备数据.从SSMS的工具中,打开SQL Server Profile,输入安全连接方式.在常规的标签下,模板选择“Standard(默认值)”,事件选择标签下,选择事件Stored Procedures→RPC:Completed:TSQL→SQL:BatchCompleted,SQL:BatchStarting,点击运行.如下图所示: 监控一段时间后

Innodb存储引擎索引概述

Innodb存储引擎索引概述 该存储引擎支持两种常见的索引:B+索引.Hash索引. Hash索引 Innodb存储引擎支持的Hash索引是自适应的,引擎会根据表的使用情况自动生成Hash索引,不能人为干预是否在一张表中生成hash索引,Mysql5.5后可以关闭hash索引. B+树索引 B+树索引是目前数据库中最常用的最有效的索引: B+树索引的构造类似于二叉树,根据键值最快的找到数据,B代表balance; B+树索引并不能找到给定键值的所在的行,只能找数据行所在的page,再把page读

MySQL的数据库引擎的类型(转)

腾讯后台开发电话面试问到数据库引擎选用的问题,这里补习一下. 本文属于转载,原文链接为:http://www.cnblogs.com/xulb597/archive/2012/05/25/2518118.html 你能用的数据库引擎取决于mysql在安装的时候是如何被编译的.要添加一个新的引擎,就必须重新编译MYSQL.在缺省情况 下,MYSQL支持三个引擎:ISAM.MYISAM和HEAP.另外两种类型INNODB和BERKLEY(BDB),也常常可以使用. ISAM ISAM是一个定义明确且

代码配置都没问题,为什么事务不回滚(了解Mysql数据库引擎)

前几天开发中遇到了一个问题,在进行调试的过程中发现配置在service层的事务不起作用,抛出异常后数据库的更新还是成功了,事务并没有回滚,然后就开始各种检查,查看spring的事务是否配置正确,进入更新方法时是否开启了事务,经过检查之后发现一切都正常,那为什么事务不回滚呢?问题出在了一个很难会去考虑的地方(数据库里创建的表不支持事务). Mysql数据库默认的创建表的引擎是:MYISAM,使用这种引擎的表效率高,但是不支持事务,所以我们在建表时最好是根据需求手动去指定我们需要的引擎,下面是一个能

如何查看mysql数据库的引擎/MySQL数据库引擎详解

一般情况下,mysql会默认提供多种存储引擎,你可以通过下面的查看: 看你的mysql现在已提供什么存储引擎:mysql> show engines; 看你的mysql当前默认的存储引擎:mysql> show variables like '%storage_engine%'; 你要看某个表用了什么引擎(在显示结果里参数engine后面的就表示该表当前用的存储引擎):mysql> show create table 表名; MySQL数据库引擎详解 作为Java程序员,MySQL数据库

MySQL的数据库引擎的类型

你能用的数据库引擎取决于mysql在安装的时候是如何被编译的.要添加一个新的引擎,就必须重新编译MYSQL.在缺省情况下,MYSQL支持三个引擎:ISAM.MYISAM和HEAP.另外两种类型INNODB和BERKLEY(BDB),也常常可以使用. ISAM ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到数据库被查询的次数要远大于更新的次数.因此,ISAM执行读取操作的速度很快,而且不占用大量的内存和存储资源.ISAM的两个主要不足之处在于,它不支持事务处理,也不能

数据库引擎

数据库引擎是用于存储.处理和保护数据的核心服务.利用数据库引擎可控制访问权限并快速处理事务,从而满足企业内大多数需要处理大量数据的应用程序的要求. 数据库应用项目是通过数据库引擎与数据库链接的.何为数据库引擎呢?简而言之,数据库引擎就是驱动各种数据库的程序,它负责处理数据库相关工作的整个核心部份.同样的,数据库应用项目的操作指令,均会通过数据库引擎的处理作用到数据库上. 数据库引擎在数据库中的作用和位置,如下图所示. Innodb引擎 Innodb引擎提供了对数据库ACID事务的支持,并且实现了

MySQL数据库引擎介绍及学习网站

h引擎介绍:ttp://www.jb51.net/article/38004.htm 学习网站:http://www.w3school.com.cn/ MyISAM:MyISAM是MySQL的ISAM扩展格式和缺省的数据库引擎.除了提供ISAM里所没有的索引和字段管理的大量功能,MyISAM还使用一种表格锁定的机制,来优化多个并发的读写操作,其代价是你需要经常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间.MyISAM还有一些有用的扩展,例如用来修复数据库文件的MyISAMC

mysql 数据库引擎

一.数据库引擎 数据库引擎是用于存储.处理和保护数据的核心服务.利用数据库引擎可控制访问权限并快速处理事务,从而满足企业内大多数需要处理大量数据的应用程序的要求. 使用数据库引擎创建用于联机事务处理或联机分析处理数据的关系数据库.这包括创建用于存储数据的表和用于查看.管理和保护数据安全的数据库对象(如索引.视图和存储过程). 二.数据库引擎任务 在数据库引擎文档中,各主题的顺序遵循用于实现使用数据库引擎进行数据存储的系统的任务的主要顺序. 设计并创建数据库以保存系统所需的关系或XML文档 实现系